写在前面
除了在XML中配置Bean,还可以采用注解的方式。
Tips: 在使用注解开发时,必须保证AOP的包导入到项目中
注解开发流程
1.在XML配置文件中进行环境配置
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--指定要扫描的包,这个包下的注解就会生效-->
<context:componet-scan base-package="" />
<!--声明注解配置的支持-->
<context:annotation-config/>
</beans>
2.为对应的类增加@Component注解
@Component
public class User{
private String name = "ZhangSan";
pirvate int age = 18;
}
该注解的作用相当于在XML文件中配置了User类,说明该类已经被Spring容器管理了。
值得注意的是,在使用该User类时,仍需要调用IOC容器,即,仍需要编写以下代码:
//获取IOC容器
Application context = new ClassPathXmlApplicationContext("applicationContext.xml");
//从容器中获取相应的类对象
User user = (User)context.getBean("user"):
这里getBean( )方法中的名字,默认为类名的小写。
3.为类的属性注入值
@Component
public class User{
@Value("赵四")
private String name;
@Value("20")
pirvate int age;
//@Value注解还可以使用在setter方法上,作用是等效的
public setName(String name){
this.name = name;
}
public setAge(int age){
this.age = age;
}
}
当然了,相对简单的数值类型,可以使用@Value注解,但是对于复杂的类型的值的注入,还是建议走XML配置
衍生注解
@Component有几个衍生注解:
- @Repository
- @Service
- @Controller
它们的作用跟@Component一样,但是作用的地方不同:
@Repository作用在DAO层,@Service作用在业务逻辑层,@Controller作用在控制层,体现了MVC层级架构的思想
【注】为了能使各个层级都能使用注解,在XML配置文件时,
<context:componet-scan base-package="" />
base-package声明的包的范围要能够包括所有层级。
@Scope注解
该注解声明类的作用域,是单例还是原型,具体方式如下:
@Component
@Scope("singleton") //@Scope("prototype")
public class User{
private String name = "ZhangSan";
pirvate int age = 18;
}
总结
XML相对于注解来说更加万能,配置一份全局文件,可在多个包下使用,维护较为方便
而注解则细化到各个java文件中去配置,维护相对复杂
理想状态下:xml文件负责管理Bean,而注解只负责属性的注入