Spring配置介绍(四)

property-placeholder:

这个是用户控制springbean中的变量而设置的,在springxml文件或注解中,可以使用变量来为spring注入动态数据。比如<property>${username}</ property >,那么username就可以通过properties文件 xml文件,系统属性或环境变量所替代。



 location:定位资源文件,可以指定jar中的,如classes:前缀的,也可以指定环境中的位置,可以是properties,也可以是xml文件,不过xml文件需要指定xml格式。

local-override:是否支持重写,系统提供动态变量时,往往会有默认值提供,但默认值往往只是默认,需要使用者有权利进去修改

properties-ref:如果文件可以被重写,这里可以配置扩展路径,供重写文件规范。

file-encoding:文件编码类型,对于喜欢使用中文的配置文件来说,这个很关键,一不小心就是乱码。一般项目可以使用“utf-8”来处理。

order:默认量底优先级,int类型的,数据越大,优先级越低。

ignore-resource-not-foundtruefalse两种,如果是true,那么你因文件 问题,而使文件读取失败,则不会出现线程中断,只会打出一个提醒日志。

system-properties-mode:他一般有三种取值 ENVIRONMENT:从环境变量中取,NEVER:只读资源文件,FALLBACK:默认模式,先从资源文件中取,如果取不到,则从系统属性中取,OVERRIDE,先从系统属性中取,如果取不到,则从资源文件中取。

property-override

property-overrideproperty-placeholder最直观的区别在于,property-override中的属性多一个ignore-unresolvable

ignore-unresolvable:这个属性默认为false,如果为false,则映射属性时,如果没有找到属性,则报错,如果为true,则如果没有映射到对应的属性不会报错。

上面的property-placeholder可以为任意的bean注入属性变量的值 ,而property-override则是指定bean而流入变量的值,比如properties文件中,可以设置为scatt.username=sc,表示在scattspringbean中,对于username的属性变量进行赋值,而对于其它 bean中的,产生不了影响。对于赋值变量时,常常有不同组件定义相同变量的情况,提供这种模式,则有效的避免这些“不规范”的行为。

annotation-config

这个节点中我们没发现任何变量,他是一个启动注解的标识,如果你想在spring加载的时候 ,将注解也相应启动,则需要配置一下空节点就可以了,则会启动注解。

component-scan

 

启动注解的时候 ,我们往往需要对注解运行规范化定义,比如哪些包内需要启动,而有的包内则不需要关注之类的。

 

 
base-package:需要扫描对应包内的类,是否有注解,如果有,需要加载。

resource-pattern:指定资源文件中的class匹配目录及文件 ,默认的为:**/*.class

use-default-filters:为true时,是启动默认的过滤器,默认为true,也就是只会扫描到@Controller定义的bean,而且对于JSR-250,则会加载ManagedBean对应的bean,如果是JSR-330,则可以加载javax.inject.Named对应的bean

annotation-configtruefalse两种,默认为true,如果为true,则表示开户自动注解,而此时上面的annotation-config的空节点将可以不用配置,如果为false,则需要配置annotation-config的空节点才会自动注解

name-generatorspringbean名字的自动生成器,对于注解,我们一般可以对id进行置空,如果为空,我们有办法按一定规则,进行名字重命名。而在name-generator可以指定一个继承于BeanNameGenerator接口的类,而实现 generateBeanName这个方法,进行重命名操作。

scope-resolver:他对于scope属性进行结构化处理,可以自定义,但需要ScopeMetadataResolver接口中的resolveScopeMetadata这个方法。默认提供有org.springframework.context.annotation.AnnotationScopeMetadataResolver

他的ScopeName取自于注解Scopevalue, ScopedProxyMode取自于属性proxyMode,如注解:@Scope(value="singleton",proxyMode=ScopedProxyMode.NO)

scoped-proxy:与scope-resolver不能同时存在,不然启动将会报错,targetClass:表示,ScopedProxyMode. TARGET_CLASSinterfaces:表示ScopedProxyMode.INTERFACESno:表示 ScopedProxyMode.NO,其它值将会报错

include-filterexclude-filter:注解黑白名单,注解解析时,扫描注解资源文件,是否需要包含哪一类文件 ,或不需要包含哪一类文件 ,后面的typeexpression,指定类型

type=”annotation”AnnotationTypeFilter过滤器,expression指定的类,需要是注解

type=”assignable”AssignableTypeFilter过滤器,表示是否为目标类的继承类或子类

type=”aspectjAspectJTypeFilter过滤器,表示以标记类的特定格式

type=”regexRegexPatternTypeFilter过滤器,按正则表达式进行匹配

type=”custom为自定义过滤器,可以自动定义过滤器,但需要继承TypeFilter类。

load-time-weaver



织入分为几种,一,编译时织入,二,加载时织入,三,运行时织入,而load-time-veaver是一种加载时织入

weaver-class:织入类,如果不指定,则默认为

org.springframework.context.weaving.DefaultContextLoadTimeWeaver,而这个类的需要配置instrument.jar,而这个jar包需要在启动的时候带着启动,如:

-javaagent:org.springframework.instrument.jar放在启动参数内。

aspectj-weaving:是否启动AspectJ织入,如果是on,则启动,如果是off,则不启动,如果是autodetect,则会检查就否存在META-INF/aop.xml这个文件 ,如果不存在,则不启动,如果存在则启动。

这个节点主要启动AspectJ,而AspectJ,则需要aop.xml,而aop.xml则是织入的的配置文件 ,节入点与织入类。所以想运用好这个,需要了解AspectJ

spring-configured



这个节点也就一个元素,所以这种节点其实只是为了启动某种组件而生的。而这个是启动AnnotationBeanConfigurerAspect,这个是通过注解方式进行注入的切面,注解中需要用@Configurable,他有四个值,valueautowiredependencyCheckpreConstruction

value,默认为空,如果自动装载为NO的话,这里其实是切面beanNamevalue的配置如@ Configurable(“poin”),表示由poin切入

autowire:默认为NO,自动装载,BY_NAME, BY_TYPE,

dependencyCheck:默认为false,之前 说过,是一个依赖检查

preConstruction:默认为fase,是否拦截于构造方法之前

这里其实也是用了AspectJ,所以也需要启动AspectJ,通过 –javaagent方式加载

mbean-export

 

 
注解方式注册MBean服务,MBean是可以通过JMX协议调用

default-domainMBean对象中的对象名,默认取类名

serverMBeanServer ,可以是类名,也可以是引用

registration:三种取值failOnExistingignoreExistingreplaceExisting

分别表示如果服务已经存在,则报错;如果服务已经存在,则不报错,不处理;如果服务已经存在,替换。

 

mbean-server

上面说是注册mbean服务,通过ID获取对应的MBeanServer

id:beanId,在代码中可以直接通过这个id去获取,

agent-id:通过MBeanServerFactory. findMBeanServer方法在MBeanServer的对象列表中按代理标识符寻找MBean,如果没有配置,如果是weblogic返回JNDI,如果是websphere,则通过com.ibm.websphere.management.AdminServiceFactory中寻找MBean,如果没有取到,则将通过ManagementFactory.getPlatformMBeanServer取获取 Mean


 

 

 

猜你喜欢

转载自huayu611.iteye.com/blog/2368166
今日推荐