1、什么是注解
- 注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值…)
- 使用注解,注解作用在类,属性和方法上
- 使用注解的目的:简化xml配置
2、Spring 针对 Bean 管理中创建对象提供注解
- @Component
- @Service
- @Controller
- @Repository
上面四个注解功能是一样的,都可以用来创建 bean 实例
名字不同只不过为了在代码中方便区分各个代码层。
3、基于注解方式实现对象创建
第一步 引入依赖(Spring-aop-5.2.6.RELEASE.jar)
第二步 开启组件扫描
- 如果扫描多个包,多个包使用逗号隔开
- 扫描包上层目录
<context:component-scan base-package="com.clearlast"></context:component-scan>
第三步 创建类,在类上面添加对象注释
-
在注解里面 value 属性值可以省略不写,
默认值是类名称,首字母小写
UserService – userService@Component(value = "userService") //相当于<bean id="userService" class=".."/> public class UserService { public void add() { System.out.println("add......."); } }
4、开启组件扫描细节配置
use-default-filters=“false” 表示现在不使用默认 filter,自己配置 filter
context:include-filter ,设置扫描哪些内容
context:exclude-filter: 设置哪些内容不进行扫描
-
如果要自己配置扫描的内容,就先将use-default-filters设置为false,
一般use-default-filters="false"和context:include-filter 是配合使用的。 -
如果只是想设置某些内容不进行扫描,就可以直接配置 context:exclude-filter,因为默认是都扫描的。
-
举例:
3.1 设置哪些内容需要被扫描
<context:component-scan base-package="com.clearlast" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
3.2 设置哪些内容不需要被扫描
<context:component-scan base-package="com.atguigu"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
5、基于注解方式实现属性注入
-
@Autowired:根据属性类型进行自动装配
-
@Resource:可以根据类型注入,可以根据名称注入
@Resource(name = “userDaoImpl1”) -
@Value:注入普通类型属性
@Value(value = “abc”) -
@Qualifier:根据名称进行注入这个@Qualifier 注解的使用,
和上面@Autowired 一起使用
@Qualifier(value = “userDaoImpl1”)示例:
@Autowired //根据类型进行注入 @Qualifier(value = "userDaoImpl1") //根据名称进行注入 private UserDao userDao;
6、完全注解开发
-
@Configuration(代表该类是一个配置类)
-
@ComponentScan( basePackages = { “…" } )(要扫描的包)
-
创建配置类,替代 xml 配置文件
@Configuration //作为配置类,替代 xml 配置文件 @ComponentScan(basePackages = {"com.clearlast"}) public class SpringConfig { }
-
编写测试类
//完全注解开发,加载配置类,使用AnnotationConfigApplicationContext,加载配置类的class
@Test public class test(){ ApplicationContext context = new AnnotationConfigApplicationContext(”SpringConfig.class"); context.getbean("xxx"); }