<!--
spring-config.xml 配置文件书写
1. 注解识别,驱动启动
<context:annotation-config/>
2. 项目扫包,识别除@Controller注解以外的注解,并使用@Componment的postProcesser。
<context:component-scan base-package="com.lhb.spring">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
3. PropertyPlaceholderConfigurer: 配置文件读取,并创建到bean中. eg.${property}; dataSource 应用。
PropertyOverrideConfigure: 当然还可以使用占位符后处理器。 形如,#beanId.property=value 。
<context:property-placeholder trim-values="true" ignore-resource-not-found="true" ignore-unresolvable="true" location="classpath*:*.properties"/>
<context:property-override location="classpath*:override.properties"/>
4. aop切面编程注解识别并处理,@Aspecct。 当然也可以使用相信的aop配置。<aop:config>标签以及其子标签等...
<aop:aspectj-autoproxy/>
公司部分
5. wconfig ,根据项目中所有注解为@wconfig或@wconfigValue的内容并对方法参数和实例变量进行注入值。
<wconfig:annotation-driven/>
6. 其他...未完待续
7. 配置文件解耦,可以吧dao,actor,task,redis等每一类的配置文件分开。并使用 import 引入配置文件到spring-config核心中。
毕竟在 web.xml 中配置,spring-config 为 spring容器上下文。
-->
<!-- 启动@aspectj的自动代理支持-->
<aop:aspectj-autoproxy/>
<context:annotation-config/>
<context:property-placeholder trim-values="true" ignore-resource-not-found="true" ignore-unresolvable="true" location="classpath*:*.properties"/>
<context:property-override location="classpath*:override.properties"/>
<context:component-scan base-package="com.lhb.spring">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--使用classpath 则选默认用classpathresource作为读取资源文件 ,以前缀为主-->
<!--当然也可以使用file , 或http未前缀-->
<import resource="classpath*:spring/spring-dao.xml"/>
<!--<import resource="classpath*:*spring/spring-actor.xml"-->
<!--<import resource="classpath*:spring/spring-redis.xml"/>-->
<!--<import resource="classpath*:spring/spring-task.xml"/>-->
<!--spring 4.0了,不需要配置-->
<!--<import resource="classpath*:spring/spring-aop.xml"/>-->
<?xml version="1.0" encoding="UTF-8"?>
<web-app
version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<!--
web.xml 配置
整个项目第一个加载并处理的配置文件,包含spring——config.xml , spring-serlvet.xml 接口创建和实现
还有就是整个容器的功能 listener,filter等。
注:
listener功能很强大,可以设计容器,请求,会话三部分本身及其属性的更改都能被各种 listener 监听器监听到,并触发相应函数。
filter 则可以过滤请求,整个 web 项目级别的过滤。
-->
<display-name>hongbin_liu.demo.spring</display-name>
<!-- 配置容器上下文 spring-config.xml 容器上下文 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-config.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--web项目中上下文初始化参数, name value的形式 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--可以不指定 springmvc 的init-param 参数,默认参数为 <servlet-name> + "-servlet"-->
<load-on-startup>1</load-on-startup> <!--装载优先级-->
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<filter>
<filter-name>requestLog</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>requestLog</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--
servlet 配置
1. 首先明确serlvet是干什么的,servlet 是 部署在tomcat容器上的对接容器,主要用于管理 项目的接口;
其中包括,接口数据input/output。 以及容器的各部分特征;
另外一点就是 在 springMVC 项目中,servlet 其实是 spring 容器的包裹容器,不关心spring容器内部处理机制,
但是关心 spring 容器的进出。
2. 扫包,只要是容器就有处理@annotation的能力。因为 它是管理所有代码的容器,扫包的原理无非就是 扫描项目文件的.class, .xml, .propertier等文件。
并启动一个容器实例,也是一个运行的程序。
3. 既然负责spring容器外围的进出,web容器的核心。当然需要配置上体现出 @responbody的存在。
-->
<!-- 载入webConfig 该文件定义HandlerMethodReturnValueHandler,以及ExceptionResolver -->
<context:component-scan base-package="com.lhb.spring">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<bean id="objectMapper" class="com.wormpex.api.json.JsonUtil" factory-method="instance"/>
<bean id="mappingJackson2HttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="objectMapper"/>
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</beans>