Spring Framework Miscellaneous

 

http://repo.spring.io

 

<mvc:annotation-driven />  2 beans
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

context:annotation-config  4 beans
context:component-scan

 

applicationContext.xml in Tomcat load order: ServletContextListener.contextInitialized  filter.init servlet.init

e.g:

main applicationContext.xml
<context:component-scan base-package="com.*">
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> 
</context:component-scan>
servlet-context.xml  for MVC Servlet.
<mvc:annotation-driven />
<context:component-scan base-package="com.*" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> 
</context:component-scan>

#ref-->#http://angelbill3.iteye.com/blog/1896502

 

Spring Annotation Resource Scanning:

import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.core.type.classreading.SimpleMetadataReaderFactory;

 

<context:component-scan name-generator scope-resolver
当一个 Bean 被自动检测到时,会根据那个扫描器的 BeanNameGenerator 策略生成它的 bean 名称。
默认情况下,对于包含 name 属性的 @Component、@Repository、 @Service 和 @Controller,会把 name 取值作为 Bean 的名字。
如果这个注解不包含 name 值或是其他被自定义过滤器发现的组件,默认 Bean 名称会是小写开头的非限定类名。
如果你不想使用默认 bean 命名策略,可以提供一个自定义的命名策略。首先实现 BeanNameGenerator 接口,确认包含了一个默认的无参数构造方法。然后在配置扫描器时提供一个全限定类名,
如下所示:
 <context:component-scan base-package="a.b" name-generator="a.SimpleNameGenerator"/>
 
与通过 XML 配置的 Spring Bean 一样,通过上述注解标识的 Bean,其默认作用域是"singleton",为了配合这四个注解,
在标注 Bean 的同时能够指定 Bean 的作用域,Spring 2.5 引入了 @Scope 注解。使用该注解时只需提供作用域的名称就行了,如下所示:
@Scope("prototype")
如果你想提供一个自定义的作用域解析策略而不使用基于注解的方法,只需实现 ScopeMetadataResolver 接口,
确认包含一个默认的没有参数的构造方法。然后在配置扫描器时提供全限定类名:
<context:component-scan base-package="a.b" scope-resolver="footmark.SimpleScopeResolver" />

import org.springframework.core.type.filter.TypeFilter;
<context:component-scan base-package="com.XX">
    <context:exclude-filter type="custom" expression="com.XX.core.spring.ComponentExcludeFilter"/>
</context:component-scan>

http://sishuok.com/forum/blogPost/list/2458.html
使用路径通配符加载Resource
Ant路径通配符支持“?”、“*”、“**”,注意通配符匹配不包括目录分隔符“/”:
“?”:匹配一个字符,如“config?.xml”将匹配“config1.xml”;
“*”:匹配零个或多个字符串,如“cn/*/config.xml”将匹配“cn/javass/config.xml”,但不匹配匹配“cn/config.xml”;而“cn/config-*.xml”将匹配“cn/config-dao.xml”;
“**”:匹配路径中的零个或多个目录,如“cn/**/config.xml”将匹配“cn /config.xml”,也匹配“cn/javass/spring/config.xml”;而“cn/javass/config-**.xml”将匹配“cn/javass/config-dao.xml”,即把“**”当做两个“*”处理。
Spring提供AntPathMatcher来进行Ant风格的路径匹配。具体测试请参考cn.javass.spring.chapter4. AntPathMatcherTest。
Spring在加载类路径资源时除了提供前缀“classpath:”的来支持加载一个Resource,还提供一个前缀“classpath*:”来支持加载所有匹配的类路径Resource。

Spring配置中classpathclasspath*的区别:  一个和多个的区别,都会查找如:classes or lib/jar,
spring-framework-reference:
Please note that " classpath*:" when combined with Ant-style patterns will only work reliably with at
least one root directory before the pattern starts, unless the actual target files reside in the file system.
This means that a pattern like " classpath*:*.xmlwill not retrieve files from the root of jar files
but rather only from the root of expanded directories. This originates from a limitation in the JDK’s
ClassLoader.getResources() method which only returns file system locations for a passed-in
empty string (indicating potential roots to search).
<context:property-placeholder location="classpath*:conf/conf*.properties"/> 
<import resource="a.xml"/> 
<import resource="b.xml"/> 


mybatis-config.xml
<properties resource="db.properties"/>

<bean id="bizSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
        <property name="mapperLocations" value="classpath*:com/XX/**/*.${bizDBTypeName}.mapper.xml" /> #如果在jar中则找不到!
<!--property name="mapperLocations" value="classpath*:com/XX/**/dao/impl/mapper/*.${bizDBTypeName}.mapper.xml" /-->
        <property name="dataSource" ref="bizDataSource" />
    </bean>

 
多事务管理,声明式事务
<tx:annotation-driven/>
<bean id="bizTxManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="bizDataSource" />       
        <qualifier value="bizTxManager"/>
    </bean>
    <bean id="sysTxManager" class="your TM implements PlatformTransactionManager">       
        <qualifier value="sysTxManager"/>
    </bean>
@Transactional(value="sysTxManager",rollbackFor={Throwable.class/*else just for RuntimeException/Error*/})

 
Bean Validator:
在mvc的servlet-context.xml中
<mvc:annotation-driven />
 <context:component-scan base-package="com.**.web" />#<-------会影响bean validator的扫描。
bean validation constraints的message在国际化环境中填写相应的code/id.

 e.g:
List<FieldError> errors = binding.getFieldErrors();
String defaultMsg=ResourceMessageManager.getMessage(error.getDefaultMessage());

 

 

 

 

 

 

你可能感兴趣的:(framework)