DI和IoC
来源:互联网 发布:金蝶软件购买 编辑:程序博客网 时间:2024/06/08 19:27
1、依赖注入(Dependency Injection)
public class A{ public void initMethod(){ B b = ...;// get a instance of B b.func(); }}
如示例代码,组件A中要使用组件B,必须先获取B的一个实例;若B是一个具体的类,只需通过new关键字创建B的实例;若B是一个接口,有多个实现,那么具体采用B的哪一个实现就不确定了。
依赖注入因此而生:接管对象的创建工作,将特定的对象饮用注入到需要改对象的组件。
2、依赖注入的方式
1)Set方法注入
public class A{ private B b; public void initMethod(){ b.func(); } public void setB(B b){ this.b = b; }}
2)构造器注入
public class A{ private B b; public A(){ this.b = b; } public void initMethod(){ b.func(); }}
3、Spring注入方式
1)构造器注入(constructor-arg)
<bean id="car" class="cn.demo.Car"> <!-- index:参数顺序 type:参数类型 name:参数名称 value:参数值 ref:引用的bean的id --> <constructor-arg index="0" type="java.lang.String" value="宝马"/></bean>
2)setter方法注入(property)
<bean id="car" class="cn.demo.Car"> <!-- name:参数名 value:参数值 ref:引用bean的id --> <property name="sid" value="10001"/> <property name="sname" value="张三"/> <property name="bike" ref="bike"/></bean>
3)@Autowired
public class A{ @Autowired private B b; public void initMethod(){ b.func(); }}
4、控制反转(Inverse of Control)
IoC:解决程序对象紧密耦合的问题,将程序构造对象的权限,交给IoC容器。
IoC容器装配Bean(XML配置)
1)无参构造器
<!-- id:bean的id name:bean的名称 class:bean的类名 init-method:对象构造后执行的方法 destroy-method:容器销毁后执行的方法,默认不执行,必须手动调用applicationContext.close();--><bean id="person" class="cn.demo.Person" init-method="setup" destroy-method="teardown"/>
2)工厂方法
<bean id="person" class="cn.demo.Person" factory-method="getInstance" />
5、Spring的核心工厂
BeanFactory和子接口ApplicationContext,getBean方法执行时,实例化一个Bean。
ApplicationContext context = new ClassPathApplicationContext(new String[]{"spring-config.xml"});Person person = context.getBean("person", Person.class);
6、其他注解
@PostConstruct:初始化之后执行的方法,同init-method
@PreDestroy:销毁之前执行的方法,同destroy-method
@Scope:指定bean的作用域
@Resource:作用同@Autowired,区别
7、Bean的作用域
- singleton
在IoC容器中仅存在一个Bean,Bean以单例模式存在。 - prototype
每次从容器getBean时,都返回一个新的Bean,即new XXX(); - request
每次Http请求都会创建一个Bean,仅适用于WebApplicationContext环境。 - session
同一个HttpSession共享一个Bean,不同session使用不同的Bean,仅适用于WebApplicationContext环境。 - globalSession
一般用于Porlet应用环境,适用于WebApplicationContext环境。
阅读全文
0 0
- 简析IoC和DI
- 001--IOC和DI
- IOC和DI
- IoC和DI
- Spring--IoC和DI
- DI 和 IOC
- spring--IoC和DI
- IOC和DI
- spring IOC和DI
- IOC和DI
- 3. IoC 和DI
- IOC和DI
- IOC和DI
- IOC和DI解析
- IOC 和 DI
- sping IoC和DI
- Spring IOC和DI
- spring IOC 和DI
- 登录成功跳转至登录前的页面
- 插入排序
- CVTE笔试题
- 动态代理介绍
- Unity3D-关于LaunchScreen界面的设置(IOS)
- DI和IoC
- Linux中的权限管理
- jvava 代码创建接口 通过jni实现C的调用步骤
- [NOIP模拟赛]老师
- ThreadPoolExecutor核心实现原理和源码解析<一>
- How To Add a License Key To Your Vuforia App
- 使用Jxl实现Excel导入导出
- 修改网站404,500的错误页面
- 初次运行 Git 前的配置