组件扫描: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......"); }}
配置文件:
各个层之间的关联关系
实际上
@Autowired和@Resource、@Inject注解的属性
使用@Autowired自动装配Bean:@Autowired注解自动装配具有兼容类型的单个Bean的属性
—构造器、普通字段,一切只有参数的方法都可以应用@Autowired注解
—默认情况下,所有使用@Autowired注解的属性都需要被设置,当Spring找不到匹配的Bean装配属性时,会抛出异常。
若某一属性允许不被设置,可以为@Autowired注解的required属性设置为false
—
—
当有有多个类型相同的Bean被装配的时候,若要不冲突:
1、在类的注解中加入特定的名字
2、注入的时候可以@Autowired和@Qualifier一起使用指定要注入的bean
除了@Autowired之外,还可以使用@Resource或@Inject来自动装配,他们的功能和@Autowired相似,建议使用@Autowired
閱讀更多 Java高級架構技術 的文章