码迷,mamicode.com
首页 > 编程语言 > 详细

spring依赖注入

时间:2019-01-31 13:16:20      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:特定   pac   计算   常用   相同   结合   引入   之间   原则   

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI)

spring ioc容器初始化好bean的实例对象之后,会对该对象中的属性进行初始化,初始化的过程依然是由容器自动来完成,这个被称为是依赖注入(dependency injection缩写是DI)。spring里面常用的注入方式有两种,setter方法注入,构造方法注入。
还有一种方式是实现特定接口注入。由于这种方式采用侵入式编程,污染代码,所以已经不用了。

基于XML配置文件的依赖注入

setter方法注入
容器通过调用setter方法将对象注入,这种方式比较简单,所以使用的概率比较高。

<!--使用set方式进行依赖注入-->
<bean id="UserService" class="com.shankai.service.UserServiceImpl">
<property name="userDao" ref="UserDaoId"/> name和set方法中UserDao对象引用名相同,创建其对象
</bean>
<bean id="UserDaoId" class="com.shankai.dao.UserDaoImpl"/> 找到需要创建对象的类



构造注入

构造注入是容器通过构造方法将实例化的对象进行注入。



<!--使用构造方法进行依赖注入-->
<bean id="UserService" class="com.shankai.service.UserServiceImpl">
<constructor-arg ref="UserDaoId" name="userDao"/>
</bean>
<bean id="UserDaoId" class="com.shankai.dao.UserDaoImpl"/>




基于注解的依赖注入

@Component、@Repository、@Service、@Controller

---------这里@Repository可写可不写,因为在整合ssm时候mybatis交给spring管理,它将dao中的mapper都生成实现类

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.shankai.dao" />
    </bean>

 


随着bean的增多,spring的配置文件肯定会越来越臃肿,因此spring引入了注解。
使用注解实现依赖注入的话,就不需要在applicationContext.xml中注册bean了,添加一个文件扫描器即可:

<!--文件扫描器-->
<context:component-scan base-package="com.monkey1024"/>






1、@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。 
2、@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用。

 

 3、@Resource(这个注解属于J2EE的),默认安照名称进行装配,名称可以通过name属性进行指定, 
如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

 

spring依赖注入

标签:特定   pac   计算   常用   相同   结合   引入   之间   原则   

原文地址:https://www.cnblogs.com/shank/p/10300231.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!