Spring2.5 IoC注解加xml
- xml配置扫描包路径:context:componet-scan base-packege="com.qiyang."
- 注解包括:@Controller @Service @Componet @Repository
- XML可设置排除注解扫描,也可以设置排除某些包,还可以按类的完整限定名排除、切面表达式、正则表达式、自定实现等等
- bean的名字:自动将类名首字母小写
- 依赖注入属性的值:@Value("admin") , 支持${jdbc.uri}获取外部资源属性 #{role.name} spEL表达式
- 自动注入:@Autowired 默认根据类型去匹配,匹配两个时,根据再根据名字去匹配,两个都匹配不上则报错
- 自定义bean名称:@Service("userXxxService")
- 设置注入的名称:@Qualifier("userServiceImpl")
- 设置自动注入的bean为主要的bean:@Primary
- 使用泛型作为注入的bean:应用场景(公共增删改查),public interface BaseService<T>
- @Autowired 可以加在方法的参数上,原理和使用与加在普通属性一致
- @Resource也可以注入bean,来自jdk,相比@Autowired区别,其是优先根据名称匹配,再根据类型匹配
- @DependsOn("user") 让user先于Role加载,有些情况下可以改变bean的加载顺序
- @Lazy 让bean懒加载,使用的时候才会被加载
- @Scope("") 默认单例 需要时可以将其设置为prototype
- 生命周期回调:@PostConstruct 初始化回调 @PreDestory 销毁回调
JavaConfig注入Bean
- Springboot完全采用JavaConfig方式,在Spring3~4以后逐渐成为核心类
- 注解@Configuration相当于一个xml配置,并且已有<beans>
- 扫描包:@ComponentScan 配置扫描包路径
- 加载Spring上下文:new AnnotationConfigApplicationContext(IoCJavaConfig.class)
- 配置第三方bean:@Bean注解,方法级别注解,可以在@Configuration 或 @Conponent 注解的类下使用
public DruidDataSource dataSource(){
DruidDataSource ds = new DruidDataSource()
ds.setName("x")
// xxxx
return ds;
}
注意:
@Bean 是自己将bean实例化好了以后,交给IOC容器注册成一个bean,其方式可以覆盖,通过@Component注册的bean,自动将返回值作为Bean的类型,方法名作为bean的name,可以name属性设置bean的别名,可以干预类的实例化过程。相比xml,替代了通过bean工厂配置初始化bean的形式
- 通过@PropertySource("classpath:jdbc.properties")可以获取外部资源文件属性,可指定多个
- 通过@Import (XxxxJavaConfig.class) 导入其他JavaConfig类,支持多个
- 主JavaConfig中默认即可在方法参数中使用外部bean,内部 bean依赖直接调用方法即可
- 扩展用法1:@Import 还可以将类注册为bean
- 扩展用法2:实现ImportSelector接口,重写selectImports方法,返回一个字符串数组,字符串写类的完全限定名,也可以将类注册成bean,注意要将此实现类加@Component即可,还有就是获取时,只能通过类型获取,不能通过名字获取
- 扩展用法3:实现ImportBeanDefinitionRegistrar,重写registerBeanDefinitions方法,通过registry bean定义参数注入bean,可以对bean起名字
好了,本期内容就是这么多,希望能够帮助到您,感谢您能读到最后,如果觉得内容不错,请您点赞转发给予鼓励,咱们下期再见。