Spring:基于注解的控制反转(ioc)
1、导入依赖(同xml方式)
2、配置文件
在applicationContext.xml文件中配置扫描注解所在的包,新增了context约束
<?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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.zapng.service"/>
</beans>
注意:在这个扫描下还有两个可选的标签exclude-filter和include-filter,即指定哪些注解要扫描,哪些注解不扫描,通常会使用排除的标签,指定annotation类型,再指定要被排除的注解的全类名
<context:component-scan base-package="com.zanpng">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
3、使用注解
创建对象的注解
用在类上,创建当前类对象并把它存入ioc容器中。
@Component,通用的
@Controller,一般用在表现层
@Service,一般用在业务逻辑层
@Repository:一般用在持久层
这些注解有一个属性value,用于指定唯一标识id。如果不写,默认就是当前类名(首字母改小写)
依赖注入的注解
用在类属性上,通常用于注入对象,并且此时set方法不是必须的。
@AutoWired,自动根据类型进行注入
如果ioc容器中有唯一的bean对象类型和要注入的变量匹配,则可以注入成功;
如果容器中有多个bean对象类型和要注入的变量匹配,则需要再次根据id匹配来注入,如果有指定的id,则可注入成功;
比如某个service层接口有两个实现类,当我们给该接口注入的时候,ioc中会有两个实现类对象可供选择
@Qualifier(value = “指定的id”),需要和@AutoWired注解结合使用。
@Resouce(name = “指定的id”),直接根据id名来注入。可以单独使用。
如果还没有,将注入失败。
以上三个注解只能用来注入其他类型的bean对象,想要注入基本类型和String类型需要使用以**解
@Value(value = "变量值")
复杂类型的注入只能用xml方式。
(注解和xml可以同时存在,通常自己定义的类使用注解,非自定义的类就只能使用xml文件了)
改变作用范围的注解
@Scope(value = "范围取值"),用在类上,用于指定bean的作用范围(参考基于xml中)。
补充说明
在依赖注入时,如果注入的是抽象类或者接口,不需要在此抽象类和接口上添加这些注解。只需要在它的子类上添加注解就可以了。但是在其他类中使用该对象时,可以使用接口来定义变量。
注入失败的原因通常有:
- 配置扫描错误
- 注解错误
- 有多个相同注入产生冲突
上一篇: Tkinter Frame清空