您的当前位置:首页正文

applicationContext配置

2021-11-19 来源:星星旅游


配置内容

1. 需要用到AOP的话,配置

对AOP的支持:通过配置织入@Aspectj切面,虽然可以通过编程的方式织入切面,但是一般情况下,我们还是使用spring的配置自动完成创建代理织入切面的工作。

2. 加入外部属性文件 PropertyPlaceholderConfigurer

PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现,也就是BeanFactoryPostProcessor接口的一个实现。PropertyPlaceholderConfigurer可以将上下文(配置文件)中的属性值放在另一个单独的标准java Properties文件中去。在XML文件中用${key}替换指定的properties文件中的值。这样的话,只需要对properties文件进行修改,而不用对xml配置文件进行修改。

3. Spring组件扫描(注解支持)

具体用法如下:

4. 引入其它各种applicationContext-*.xml文件

其实这些文件本来都应该配置在applicationContext.xml里面的,只是出于文件分工,后期维护性考虑才分开到各个xml配置文件里的

标签

额外补充

一直不理解为什么要在applicationContext.xml里面配置一个ApplicationUtil的bean

com.framelib.utils.ApplicationUtil这个类是自己写的,源码:

该类实现了ApplicationContextAware接口,百度了一下该接口的用法,如下:

Spring中ApplicationContextAware接口用法

加载Spring配置文件时,如果Spring配置文件中所定义的Bean类,如果该类实现了ApplicationContextAware接口,那么在加载Spring配置文件时,会自动调用ApplicationContextAware接口中的

public void setApplicationContext(ApplicationContext context) throws BeansException

方法,并且自动可获得ApplicationContext 对象。前提必须在Spring配置文件中指定改类。

需要在配置文件中配置相关的bean:

后来将该配置注释掉,项目启动顺利,但是发出请求时便报如下的错:

总结原因:

我发起请求中用到了Spring中无法注入的bean(这里多说一句:我们没有办法给MapperScannerConfigurer创建的这些映射器指定id或name属性,它们对我们似乎是不可见的。这个问题的解决之道在于采用了Spring针对自动侦测到的组件的默认命名策略,亦即把类/接口名字的首字母小写,其他不变,作为映射器的名字。例如,映射器接口TeacherMapper被扫描后创建的映射器bean名为teacherMapper。因此,我们可以像以前一样使用这样的代码来得到TeacherMapper实例:

TeacherMapper mapper = (TeacherMapper)ctx.getBean(\"teacherMapper\"))

因此需要该ApplicationUtil类的getBean(name)方法来或取bean,这种无法在Spring中注入的bean一般是工具类的,因此如果不配置该bean,就无法或取bean,于是报了NullPointerException。

如果发起的请求不会用到无法注入的bean就会顺利走通。

因篇幅问题不能全部显示,请点此查看更多更全内容