控制反转IoC

    技术2025-02-15  31

    1.1Spring组成

    Spring框架主要由七大模块组成。

    核心模块 Spring Core模块是Spring的核心容器,他实现了IoC模式,提供了Spring框架的基础功能。在模块中包含组重要的BeanFactory类是Spring的核心类,负责对JavaBean的配置与管理。Spring Core模块采用Factory模式实现了IoC容器即依赖注入。Context模块 Spring Context模块继承BeanFactory类。它还提供了框架式的bean的访问方式和很多企业级的功能,如JNDI访问、支持EJB、远程调用、集成模板框架、E-mail和定时任务调度等。AOP模块 Spring集成了所有AOP功能,通过事务管理可以使任意Spring管理的对象AOP化。DAO模块 DAO模块提供了JDBC的抽象层,简化了数据库厂商的异常错误。O/R映射模块Web模块MVC模块 Spring Web MVC模块建立在Spring核心功能之上,这使它能拥有Spring框架的所有特性。

    1.2简单配置Spring

    jar包名称说明spring.jar整个Spring模块,包含表中所有的jar的功能spring-core.jarSpring的核心模块,包含IoC容器spring-aop.jarSpring的AOP模块spring-context.jarSpring的上下文,包含ApplicationContext容器spring-dao.jarSpring的DAO模块,包含对DAO与JDBC的支持spring-orm.jarSpring的ORM模块,支持Hibernate、JDO等ORM工具spring-web.jarSpring的Web模块,包含Web application contextspring-webmvc.jarSpring的MVC框架模块

    Spring的配置结构如下图

    1.3 ApplicationContext的应用

    ApplicationContext容器不仅提供了BeanFactory的多有特性,同时也允许使用更多的声明方式来得到开发人员需要的功能。

    ClassPathXmlApplicationContext类 从当前类路径中检索配置文件并加载来创建容器,其语法格式如下: //获取到容器,容器配置文件 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //从容器中获取指定id的对象 People p = (People) context.getBean("p1");//对象不是new出来的,是从容器中get出来的 FileSystemXmlApplicationContext类 该类也是ApplicationContext接口的实现类,和1区别在于读取Spring配置文件的方式。它不再从类路径中获取配置文件,而是通过参数指定配置文件的位置,可以获取类路径之外的资源。 ApplicationContext context = new ClassPathXmlApplicationContext(String configLocation); WebApplicationContext类 WebApplicationContext是Spring的Web容器,有两种方法可以再Servlet中使用WebApplicationContext。第一种方法是在Servlet的web.xml文件中配置Spring的ContextLoaderListener监听器;第二种方法同样修改web.xml文件,在文件中添加Servlet,使用Spring的org.springframework.web.context.ContextLoaderServlet类。

    2.1控制反转与依赖注入

    IoC将创建实例的任务交给IoC容器,这样开发应用代码时只需要直接使用类的实例,这就是IoC控制反转,即“依赖注入”,它使程序组件或类之间尽量形成一种松耦合的结构。

    依赖注入有三种实现类型,Spring支持后两种:

    接口注入Setter注入构造器注入

    2.2bean配置

    想要在Spring IoC容器中获取一个bean,首先要在配置文件中的< beans>元素中配置一个子元素< bean>,Spring的控制反转机制会根据< bean>元素的具体配置来实例化这个bean实例。

    <bean id="test" class="com.bean.Test">

    其中,id属性为bean的名称,class属性为对应的类名,这样通过BeanFactory容器的getBean(“test”)方法就可以获取到该类的实例。

    2.3Setter注入

    首先创建用户的JavaBean,代码如下:

    public class User{ private String name;//姓名 private Integer age;//年龄 private String sex; //性别 ... //省略Setter()和Getter()方法 }

    在Spring的配置文件ApplicationContext.xml中配置该JavaBean,代码如下:

    <bean name="user" class="com.bean.User"> <property name="name"> <value>小强</value> </property> ... </bean>

    2.4构造器注入

    在用户JavaBean中创建构造方法,代码如下:

    public class User{ private String name;//姓名 private Integer age;//年龄 private String sex; //性别 //构造方法 public User(String name,Integer age,String sex){ this.name = name; this.age = age; this.sex = sex; } }

    在Spring的配置文件ApplicationContext.xml中通过< constructor-arg>元素为JavaBean的属性赋值,代码如下:

    <bean name="user" class="com.bean.User"> <constructor-arg> <value>小强</value> </constructor-arg> ... </bean>

    以上内容均来自《Java Web从入门到精通》,作为自己的学习笔记,为了记录自己学习和探索的过程,仅供交流和学习。

    Processed: 0.009, SQL: 9