以下注解标记类,而非接口,有以下几个
@Controller:标记控制层
@Service:业务逻辑层
@Repository:数据访问层
@Component:普通的Bean
不一定必须使用对应的注解,它们都是Component,使用相应的注解增强了可读性,且利于spring管理(如可以在配置对某注解设置排除/包含规则等)
一般很少将实体类注册成Bean。
扫描包:<context:component-scan base-backage=""/>
@Value
设置属性注入的值
${}
:获取属性文件的值
#{}
:获取对象的值
@Autowired
- 可以标记属性,表示属性自动注入,默认按类型匹配,如果匹配多个,再按名称匹配,如果名字没有匹配到,就会报错,解决这个问题:
- 或者修改属性的名字。
- 或者改bean的名字,可以在注解里设置bean的名字。
- 或者在属性上加@Qualifier,来这是属性匹配的名字。
- 或者在一个bean上加@Primary,设置为主要的bean。
- 也可以标记在方法上,表示参数自动注入。
- 也可以标记在构造器上,表示参数自动注入。
@Resource
是JDK的一个注解,优先按名字匹配,再根据类型匹配。
公共接口使用泛型。
@DependsOn
控制加载顺序,对应depends-on
@Lazy
设置Bean类懒加载,对应lazy-init
@Scope
@PostConstruct
设置生命周期回调:初始化回调
@PreDestroy
设置生命周期回调:销毁前回调