在Spring中,除了在XML文件中用bean标签进行bean注入容器,还可以利用注解的方式将bean的注入Spring容器。
一、使用注解方式的配置:
首先需要引入AOP的包才可以,有时候哪里都没问题,但是就是报错的话,有可能就是没有AOP的jar包的问题,在maven中检查一下是否缺少该jar包。然后,在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">
</beans>
二、bean注入:之前用XML文件方式注入bean的时候,都是在xml中写一个个的bean标签进行配置,现在,导入注解的约束后,在xml中就只需要写入注解需要扫描的包就行了:
<context:component-scan base-package="com.dao"/>
比如上图的示例中,我导入了com.dao包,因此,我该包中的所有类,就可以通过注解方式注入bean,直接写Java代码中,写在类头上:(相当于配置文件中 id=“user” class=这个类)
@Component("user")
public class User {
public String name = "小明";
}
三、属性注入:不同于DI注入,必须要set方法,注解可以直接在属性上面通过value赋值:
@Component("user")
public class User {
@Value("小明")
public String name;
}
或者如果有set的话,在可以在set上用value:
@Component("user")
public class User {
public String name;
@Value("小明")
public void setName(String name) {
this.name = name;
四、补充信息:
@Controller:web层
@Service:service层
@Repository:dao层
这三个注解,很奇怪,是MVC中用的注解,猛地一看,感觉似乎各自有各自的特点,其实,他们本质都是Component,一样的作用,只不过在MVC中给另外起个名字而已,其实可以都用@Component。
@scope:
singleton:单例模式,默认是单例。
prototype:可以创建多个不同对象。
@Controller("user")
@Scope("prototype")
public class User {
@Value("小明")
public String name;
}
总结
XML和注解方式的区别:
XML:结构清晰,维护方便,适用任何情况。
注解:开发简单。
因此,推荐xml和注解结合开发,用xml完成bean注入,用注解完成属性注入。