首先用spring框架开发的程序员会有两种用spring开发的风格
第一种就是我们spring配置的ApplicationContext.xml配置文件
另一种就是我们spring的注解
这时候疑问来了,注解是否比配置Spring的XML更好?
答案当然不是绝对的!
基于注解的配置的引入引发了这种方法是否比XML“更好”的问题。简短的回答是“它取决于谁。”
长期的答案是每种方法都有其优点和缺点,通常,由开发人员决定哪种策略更适合他们。由于它们的定义方式。
《注解在其声明中提供了大量上下文,从而导致更短更简洁的配置。但是,XML擅长在不触及源代码或重新编译它们的情况下连接组件。一些开发人员更喜欢将布线靠近源,而另一些开发人员则认为注解类不再是POJO,而且配置变得分散且难以控制。》
综上所述,无论选择如何,Spring都可以兼顾两种风格,甚至可以将它们混合在一起。
好,接下来我们就开始讲解我们平时会用的注解
自我理解使用注解定义bean两种方式{
1)@Configuration
@Bean
2)@CompentScan (bean的扫描){
@Compoment
@Repository:用于标注Dao类
@Service:用来表明业务逻辑一般建议在项目中写在实现类上
@Controller:用于标注控制器的类
@Configuration 定义取代xml的java配置类
@Autowired:用来表示根据类型注入
@Resource:用来表示根据名称注入
@Scope:等同于配置文件scope属性
@Import 导入其他的java配置类
@Description:用来描述我们的代码(也就是我们的开发人员做项目期间为了更方便的读代码)
}
bean的扫描也就是@ComponentScan的作用是:
扫描指定包下的标记性注解
如果不指定包名,默认与类同级的包及子包
当然我们的注解上也可以实现bean属相的生命周期:
@PostConstruct:相当于我们spring配置文件中的bean属性的init-method方法
@PreDestory:相当于我们spring配置文件中的bean属性的destroy-method方法
范围
@Scope
导入
@Import 导入其他的java配置类
@ImportResource 导入其他spring的xml配置文件
属性文件
@PropertySource 导入属性文件
@Value("${属性文件的key}")
配置PropertySourcesPlaceholderConfigurer类
利用BeanFactoryPostProcessor解决站位符问题
参考如下: 也就是我获取的是jdbc的配置文件的URL路径
简单的main方法实现
实现的时候的注意区分:
以上注解的实现用来打开spring容器创建实例化对象的是
AnnotationConfigApplicationContext ann= new AnnotationConfigApplicationContext();
而我们spring配置文件中的是
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(“获取配置文件的路径”);
容器扩展
1. Bean元数据前后置处理
BeanFactoryPostProcessor
更改Bean的定义 :BeanDefinition <bean abastract lazy-init
- Bean前后置处理
BeanPostProccessor(postProcessBeforeInitialization,postProcessAfterInitialization)
在Bean被初始化后,给与修改其属性及特征的机会
当然你用延迟加载这个方法试不出来效果的时候 我建议你使用上图那个方法 并且在实体类里创建一个方法输出一句话来演示 参考:
那么我们main方法的简单实现如下:
那么Bean前后置处理的这个接口BeanPostProccessor注意跟上面的加Factory的区分
简单参考如下:
具体实现:
环境Environment
记得在这个类上面加上我们的@Configuration
main的简单实现参考如下:
帮助我们理解spring容器的图示
ok我们先写到这里. 未完待续…