Spring通过注解的方式配置Bean

组件扫描:Spring能够从classpath下自动扫描、侦测和实例化具有特定注解的组件。

特定组件包括:

—@Component:基本注解,标识了一个受Spring管理的组件

—@Respository:标识持久层组件

—@Service:标识业务层(服务层)组件

—@Controller:标识表现层组件

对于扫描的组件,Spring有默认的命策略:使用非限定名,第一个字母小写。也可以通过注解中的value属性标识组件的名称 。

1、base-package属性指定一个需要扫描的基础类包,Spring容器会扫描这个基础类包及其子包中的所有类,、

2、当需要扫描多个包时,可以使用逗号分隔

3、当需要扫描某个特定的类,而非所有,可以使用resource-pattern过滤特定的类(自己需要的类,就是过滤进来)

4、context:include-filter子节点标识包含的目标类,context:exclude-filter子节点标识排除哪些类下可以包含若干个这样的子节点

controller:

package annotation.controller;import org.springframework.stereotype.Controller;/** * @author chenpeng * @date 2018/6/2 15:21 */@Controllerpublic class UserController { public void execute(){ System.out.println("UserController execute...."); }} 

service:

package annotation.service;import org.springframework.stereotype.Service;/** * @author chenpeng * @date 2018/6/2 15:20 */@Servicepublic class UserService { public void add(){ System.out.println("UserService add....."); }}

respository:

package annotation.respository;import org.springframework.stereotype.Repository;/** * @author chenpeng * @date 2018/6/2 15:19 */@Repositorypublic class UserImpl implements User { public void save() { System.out.println("save......"); }}

配置文件:

          

各个层之间的关联关系

实际上元素会自动注册AutowiredAnnotationBeanPostProcessor实例,改实例可以自动装配

@Autowired和@Resource、@Inject注解的属性

Spring通过注解的方式配置Bean

使用@Autowired自动装配Bean:@Autowired注解自动装配具有兼容类型的单个Bean的属性

—构造器、普通字段,一切只有参数的方法都可以应用@Autowired注解

—默认情况下,所有使用@Autowired注解的属性都需要被设置,当Spring找不到匹配的Bean装配属性时,会抛出异常。

若某一属性允许不被设置,可以为@Autowired注解的required属性设置为false

当有有多个类型相同的Bean被装配的时候,若要不冲突:

1、在类的注解中加入特定的名字

2、注入的时候可以@Autowired和@Qualifier一起使用指定要注入的bean

除了@Autowired之外,还可以使用@Resource或@Inject来自动装配,他们的功能和@Autowired相似,建议使用@Autowired


分享到:


相關文章: