04_注解实现及属性注入
张创琦
annotation 注解
注解标识在类上,表示对象由Spring容器创建,value属性表示创建的id值,value可以省略,默认是类名的首字母小写.
Repository更习惯用于Dao层, Service习惯用于Service层, Controller习惯用于Controller层, 都可以添加value属性
@Resource 自动注入
相关注解单词
@Resource //JDK所带的注解 //JDK版本高于1.6, 默认按名称自动装配, 但是名称没有相符的话就按类型自动装配
@Repository("teamDao") //更适用于Dao
@Service("teamService") //更适用于Service
@Controller("Controller") //更适用于Controller
@Repository("team") //更适用于Bean
xml相关配置
annotation.xml 配置
1 将 xmlns 复制一份,加上 :context,
2 网址添加两个
<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">
1 属性注入 | 多个包的扫描
<!-- 告知Spring要扫描的包,这些包以及子包当中的类如果添加了@Component注解,这些添加了注解的包就交给了Spring容器创建对象 -->
<!-- 在Beans中添加命名空间 -->
方法1:
<!-- 多个包的扫描:方法1:直接使用多个context:component-scan来进行标明 -->
<context:component-scan base-package="com.cq.dao"></context:component-scan>
<context:component-scan base-package="com.cq.service"></context:component-scan>
<context:component-scan base-package="com.cq.controller"></context:component-scan>
方法2: 推荐
<!-- 多个包的扫描:方法2:在base-package中直接声明要扫描的多个包, 逗号分号分开均可 -->
<context:component-scan base-package="com.cq.dao, com.cq.service, com.cq.controller"></context:component-scan>
方法3:
虽然简洁,但是容易多扫描到其它不用的包
<!-- 多个包的扫描:方法3:在base-package中直接声明要扫描的多个包的父包 -->
<context:component-scan base-package="com.cq"></context:component-scan>
2 注解实现
注解可以加在属性上,也可以加在set方法上。
示例:
@Component
public class Animal {
//Value也可以写在set方法上面
@Value("狗")
private String type;
private String variety;
@Value("柴犬")
public void setVariety(String variety) {
this.variety = variety;
}
其它的直接添加在标头添加注解即可。
在Service和Controller中需要添加autowired注解来完成自动注入。
@Autowired
private AnimalService animalService;
@Autowired //自动装配,默认按照类型装配
//required属性, =true的话,必须有animalDao类型,没有就直接报错,
// =false的话有同类型的话就用,没有的话就报空指针异常
@Qualifier("animalDao") //Qualifier可保证按名称自动搭配, Bean包中添加注解时存在对象名称的添加
private AnimalDao animalDao; //不能new对象