Spring自我总结
1、InitializingBean
Spring设置完一个bean的合作者后,会检查bean是否实现InitializingBean接口,实现的话会调用afterPropertiesSet(InitializingBean的唯一方法)方法,将某些数据加载到缓存中(如数据字典等不经常会改变的一些数据)。
2、<context:component-scan>使用说明
在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean。
<!-- 自动扫描且只扫描@Controller -->
<context:component-scan base-package="com.coracle" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" />
</context:component-scan>
use-default-filters="false"表示不要使用默认的过滤器,而使用<context:exclude-filter>。
<context:exclude-filter>标签作用缩小扫描粒度,如上图配置只扫描所有带@Controller注解的java类,并注册成bean(use-default-filters="true"时不起作用,默认为true)。
3、SpringMVC和Spring各自扫描自己的注解不要互相混淆
3.1web.xml中springMVC相关部分
<!-- Spring MVC Servlet -->
<servlet>
<servlet-name>springServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3.2 mvc.xml文件中关键部分
<!-- 开启springMVC注解支持 -->
<mvc:annotation-driven />
<!-- 容器默认的DefaultServletHandler用于处理所有静态内容与无RequestMapping处理的URL-->
<mvc:default-servlet-handler/>
<!-- 自动扫描且只扫描@Controller -->
<context:component-scan base-package="com.coracle" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" />
</context:component-scan>
3.3 web.xml中spring容器关键部分
<!-- Spring ApplicationContext配置文件的路径,可使用通配符,用于后面的Spring Context Loader -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/applicationContext.xml,classpath*:/applicationContext-shiro.xml</param-value>
</context-param>
3.4 spring-core.xml文件关键部分
<!-- 使用annotation定义事务 -->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
<!-- 使用annotation 自动注册bean, 并保证@Required、@Autowired的属性被注入 -->
<context:component-scan base-package="com.coracle">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" />
</context:component-scan>