spring依赖注入

Posted shank

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring依赖注入相关的知识,希望对你有一定的参考价值。

控制反转(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依赖注入的主要内容,如果未能解决你的问题,请参考以下文章

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

Android 片段和依赖注入

Android片段和依赖注入

Spring依赖注入的方式

spring依赖注入,和控制反转。用自己的话说是怎么说的。最好能够用代码来解释

Spring设置注入和构造注入的区别