您的位置:首页 > 编程语言 > Java开发

Spring的IOC(控制反转)和DI(依赖注入)

2017-09-19 22:23 537 查看
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环境(不常用)
globalSession:  一般用于Porlet应用环境,该作用域仅适用于WebApplicationContext环境(不常用)

常用的只有两种,singleton和prototype

<!--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:销毁
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring java