注入依赖对象可以采用 手工装配或自动装配,在实际应用中建议使用手工装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果。
一、依赖注入——手工装配
手工装配依赖对象,在这种方式中又有两种编程方式
1.在xml配置文件中,通过在bean节点下配置,如
<bean id="orderService" class="com.reiyenKart.service.OrderServiceBean"
<constructor-arg index="0" type="java.lang.String" value="xxx" /> //构造器注入
<property name="name" value="xxlong" /> //属性setter方法进入
</bean>
2.在java代码中使用@Autowire或@Resource等注解方式进行装配.注解方式的注入主要针对对象属性的注入。使用注解功能要引用注解包(注:@Resource注解在spring安装目录的lib\j2ee\common-annotations.jar),另beans.xml的配置模板如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config /><!-- 开启注解功能,这个配置隐式注册了多个对注释进行解析的处理器:AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,
PersistenceAnnotationBeanPostProcessor,RequiredAnnotationBeanPostProcessor
-->
</beans>----其中红色部分必须在命名空间中增加
优点:使用注解方式注入依赖对象可以防止spring的配置文件过于臃肿,同时可以有效的省去一些属性的setter方法,使代码变得更简洁。
在java代码中使用@Autowired或@Resource注解方式进行装配,这两个注解的区别是: @Autowired默认按类型装配,@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。@Resource它是j2ee的注解,在jdk1.6中已包含它了;@Autowired,它属于spring特有的注解;所有推荐大家使用@Resource这个注解,如果使用@Autowired注解的话,会和Spring耦合在一起,为了降低程序间的耦合性@Resource更有优势。
2.1 Resource注解实例
public class UserServiceBean {
@Resource(name = "userDaoImpl")
private UserDao userDao;
private UserDao userDao2;
@Resource
public void setUserDao2(UserDao userDao2) {
this.userDao2 = userDao2;
}
public void test() {
userDao.save();
userDao2.save();
}
}
然后在bean.xml中的配置如下:
<bean id="userDaoImpl" class="com.reiyen.dao.impl.UserDaoImpl" />
<bean id="userServiceBean" class="com.reiyen.service.UserServiceBean" />
简要说明:@Resouce注解可以在字段上标记,也可以在对应的setter方法上标记。名称可以通过@Resource的name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。此注解可以不使用name属性,它会自动去查找匹配的类型(先以字段名称为name的值查找,如找不到会再根据依赖对象的类型查找)。
注意: 如果没有指定name属性,并且按默认的名称仍然找不到依赖对象,@Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了,就应确保name的值在xml中有相应的bean Id对应。
2.2 Autowired注解实例
@Autowired
Private UserDao userDao ;//用于字段上
@Autowired
public void set UserDao( UserDao userDao ){ //用于属性的setter方法上
this.userDao = userDao ;
}
@Autowired 注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false.如下:
@Autowired(required=false)
private UserDao userDao;
如果我们想使用按名称装配, 可以结合@Qualifier注解一起使用。如下:
@Autowired @Qualifier("userDaoImplXXX")
private UserDao userDao;
说明:@Autowired默认是按照类型来查找对应的bean实例注入,如果想注入指定名称的bean实例,可以使用@Qualifier注解来指定名字。Required属性设为true时,如果不能成功注入则会报告异常,如果设为false而不能成功注入,则会将userDao设为null。同样地,它也实用于setter方法。
二、依赖注入——自动装配依赖对象
自动装配(了解,不建议使用):除了要设置字段的setter方法外,还应在beans.xml配置文件中设置如下内容:
<bean id="userServiceBean2"
class="com.reiyen.service.UserServiceBean2" autowire="byType"/>
<bean id=”” class=”” autowire=”byType” />
除了byType外,autowire的可选属性如下:
byType: 按类型装配,可以根据属性的类型,在容器中寻找跟该类型匹配的bean。如果发现多个,那么将抛出异常。如果没有找到,即属性值为null.
byName: 按名称装配,可以根据属性的名称,在容器中寻找跟该属性名相同的bean,如果没有找到,即属性值为null.
Constructor与byType的方式类似, 不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。
Autodetect: 通过bean类的自省机制(introspction)来决定是使用constructor还是byType方式来进行自动装配。如果发现默认的构造器,那么将使用byType方式。
分享到:
相关推荐
03_mvc和依赖注入部分实现_源码。
最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式,为了灵活我在依赖注入的时候把这两种实现都给注入进了依赖注入容器中,但是在服务调用的时候总是获取到最后注入的那个方法的实现,这...
详解 Spring 3.0 基于 Annotation 的依赖注入实现。。详解 Spring 3.0 基于 Annotation 的依赖注入实现。。
EFcore Repository 依赖注入方式实现数据库基本操作
详解Spring基于Annotation的依赖注入实现
对于spring配置一个bean时,如果需要给该bean提供一些初始化参数,则需要通过依赖注入方式,所谓的 依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程(将依赖关系注入到对象中) ,spring的...
✨一个轻量级的PHP依赖注入框架,让你自定义的方法也可以使用依赖注入.
实现依赖注入:1、构造函数注入。2、属性注入。3、接口注入。4、IOC容器注入。5、Unity注入,根据配置文件
.Net or .Net Core依赖注入实现。.net6工程
控制反转 依赖注入的c#实现,很好的教程。
较为框架式的演示了DI服务依赖注入 适用于熟悉C#中的继承,基本的Core命令使用等. 该示例演示了以服务器集群为背景的各种业务的依赖注入. 示例来自于B站杨中科老师的.NET Core(6.0)教学.
NULL 博文链接:https://matchless1688.iteye.com/blog/1038302
模仿Spring实现一种基于xml配置文件的依赖注入机制。文件中将实现3中注入,一是单值注入,包括int,float,double,char等,也包括String注入;二是Java容器注入,包括List,Set,Map三种容器的注入,最后一种是java ...
Unity MVC实现依赖注入实例
Unity实现依赖注入基础Unity实现依赖注入基础Unity实现依赖注入基础Unity实现依赖注入基础
java 无需数据库 简单实例 如何实现Spring依赖注入 AOP
javaEE 开发中 现在最成熟的框架之一应该就是spring了 spring框架最强大的地方就是实现了依赖注入 也叫控制反转 最近的一个项目中用的就是 spring框架 spring框架是工厂模式的应用结合了MVC的设计思想 大家可以...
用Roboguice实现依赖注入,android源码,0分下载了哦
MVC4使用Autofac实现依赖注入Demo,基于MVC4.0的
本项目为Java项目,使用Spring实现依赖注入,实现采用ApplicationContext,不再直接使用XmlBeanFactory方式。适合初学者了解Spring依赖注入的实现。