Spring的IOC和DI
1、概念
1)IOC和DI:控制反转和依赖注入是一种基于接口的编程,bean有IOC容器创建,在用的时候从容器中拿即可,主要是采用反射来实现的,其核心组件为BeanFactory,但实际开发中是XmlBeanFactory。
2)反射机制:在运行状态中,对于任意一个类,都可以知道这个类的属性和方法,对任意一个对象,都可以调用它的方法和属性,这种动态获取类的信息和动态调用对象方法的功能成为反射机制。
2、spring中的bean
spring如同一个大的工厂,bean如同该工厂的产品。
3、bean的装配方式
XML和注解。
4、bean的实例化方式(三种)
1)使用构造器实例化
在xml中配置,然后直接使用,不需要额外的工厂类实现。
xml配置:
<bean id="userervice" class="cn.spring.service.impl.UserServiceImpl"></bean>
使用:
(1)加载spring的配置文件
(2)通过getBean(“name”)方法获得该bean
2)静态工厂方式
条件:需要工厂类和工厂方法,且工厂为静态工厂。
XML配置:
<bean id="userervice1" class="cn.spring.service.impl.UserServiceImplFactory" factory-method="createPersonServiceBean"></bean>
使用:同上。
3)动态工厂方式
XML配置:
<!--使用实例工厂构造对象, 注: 要先实例化工厂-->
<bean id="beanFactory" class="com.fq.instance.InstanceBeanFactory"></bean>
<!-- 再通过工厂对象的实例方法,构造目标对象 -->
<bean id="instanceBean" factory-bean="beanFactory" factory-method="getInstance"> </bean>
使用:同上。
5、bean的作用域(5中)
singleton : 在容器中仅存在一个实例(单例模式)
prototype : 每次从容器中获取都返回一个新的实例,即每次调用getBean()时,都执行一次构造方法(lazy,原型模式)
request :每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境(不常用)
session : 同一个Session共享一个Bean,仅适用于WebApplicationContext环境(不常用)
<!--Spring使用scope标签来制定bean的作用域(默认为Singleton)-->
<bean id="singletonBean" class="com.fq.instance.SingletonBean" scope="singleton"/>
<bean id="prototypeBean" class="com.fq.instance.PrototypeBean" scope="prototype"/>
6、依赖注入的方式
1)setter方法注入 2)构造器注入 3)静态工厂方法注入 4)实例方法注入
7、注解配置bean
在spring的配置文件中加上自动扫描,在类上即可添加注解,采用spring管理
<context:component-scan base-package="com.spring.learn"/>
1)@Component :交由spring管理
2)@Controller :控制器,web层组件
3)@Service :业务类,业务层组件
4)@Repository :持久层组件
8、注解配置依赖注入
1) @Value
(1)简单类型:@Value("123")
(2)复杂属性((使用SpEL表达式): @Value("#{car}")
2)@Autowired
@Autowired 默认按照类型进行注入(如果容器中存在两个相同类型对象,则@Autowired无法注入)
3)@Resource
Spring支持JSR-250规范,可以使用@Resource()进行属性注入,功能和@Autowired相同
9、注解bean的生命周期
@PostConstruct:初始化
@PreDestroy:销毁
1、概念
1)IOC和DI:控制反转和依赖注入是一种基于接口的编程,bean有IOC容器创建,在用的时候从容器中拿即可,主要是采用反射来实现的,其核心组件为BeanFactory,但实际开发中是XmlBeanFactory。
2)反射机制:在运行状态中,对于任意一个类,都可以知道这个类的属性和方法,对任意一个对象,都可以调用它的方法和属性,这种动态获取类的信息和动态调用对象方法的功能成为反射机制。
2、spring中的bean
spring如同一个大的工厂,bean如同该工厂的产品。
3、bean的装配方式
XML和注解。
4、bean的实例化方式(三种)
1)使用构造器实例化
在xml中配置,然后直接使用,不需要额外的工厂类实现。
xml配置:
<bean id="userervice" class="cn.spring.service.impl.UserServiceImpl"></bean>
使用:
(1)加载spring的配置文件
(2)通过getBean(“name”)方法获得该bean
2)静态工厂方式
条件:需要工厂类和工厂方法,且工厂为静态工厂。
XML配置:
<bean id="userervice1" class="cn.spring.service.impl.UserServiceImplFactory" factory-method="createPersonServiceBean"></bean>
使用:同上。
3)动态工厂方式
XML配置:
<!--使用实例工厂构造对象, 注: 要先实例化工厂-->
<bean id="beanFactory" class="com.fq.instance.InstanceBeanFactory"></bean>
<!-- 再通过工厂对象的实例方法,构造目标对象 -->
<bean id="instanceBean" factory-bean="beanFactory" factory-method="getInstance"> </bean>
使用:同上。
5、bean的作用域(5中)
singleton : 在容器中仅存在一个实例(单例模式)
prototype : 每次从容器中获取都返回一个新的实例,即每次调用getBean()时,都执行一次构造方法(lazy,原型模式)
request :每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境(不常用)
session : 同一个Session共享一个Bean,仅适用于WebApplicationContext环境(不常用)
globalSession: 一般用于Porlet应用环境,该作用域仅适用于WebApplicationContext环境(不常用)
<!--Spring使用scope标签来制定bean的作用域(默认为Singleton)-->
<bean id="singletonBean" class="com.fq.instance.SingletonBean" scope="singleton"/>
<bean id="prototypeBean" class="com.fq.instance.PrototypeBean" scope="prototype"/>
6、依赖注入的方式
1)setter方法注入 2)构造器注入 3)静态工厂方法注入 4)实例方法注入
7、注解配置bean
在spring的配置文件中加上自动扫描,在类上即可添加注解,采用spring管理
<context:component-scan base-package="com.spring.learn"/>
1)@Component :交由spring管理
2)@Controller :控制器,web层组件
3)@Service :业务类,业务层组件
4)@Repository :持久层组件
8、注解配置依赖注入
1) @Value
(1)简单类型:@Value("123")
(2)复杂属性((使用SpEL表达式): @Value("#{car}")
2)@Autowired
@Autowired 默认按照类型进行注入(如果容器中存在两个相同类型对象,则@Autowired无法注入)
3)@Resource
Spring支持JSR-250规范,可以使用@Resource()进行属性注入,功能和@Autowired相同
9、注解bean的生命周期
@PostConstruct:初始化
@PreDestroy:销毁