Spring的各种变量注入配置文件代码(详见项目:spring_injection): <property name="strValue" value
= "hello"/> 注入string类型的变量 <property name="intValue"
value = "123"/> 注入int类型的变量 <property name="listValue"> <list> <value>list1</value> <value>list2</value> </list> </property> 注入list类型的变量 <property name="setValue"> <set> <value>set1</value> <value>set2</value> <value>set3</value> </set> </property> 注入set类型的变量 <property name="arrayValue"> <list> <value>array1</value> <value>array2</value> </list> </property>
注入数组类型的变量 <property name="mapValue"> <map> <entry key="k1"
value="v1"/> <entry key="k2"
value="v2"/> </map> </property> 注入map类型的变量 如何定义属性编辑器? (1).继承类PropertyEditorSupport,覆写方法setAsText(); (2).将属性编辑器注入到spring配置文件中。 如:如果有日期类型的属性需要注入的话,则需要写属性编辑器,继承PropertyEditorSupport类,覆写相应的方法—setAsText() Spring公共属性注入描述方法(详见项目:spring_common): (1).通过<bean>标签定义公共属性,制定属性abstract = true; (2).具有相同属性的类,只需在<bean>标签中指定其parent属性即可 公共属性注入配置文件中的代码: <bean id = "AbstractBean" abstract="true"> <property name="id"
value="20044455"/> <property name="name"
value="Jack"/> </bean> ---------------此处相当于java中父类 <bean id = "bean2" class
= "com.bjsxt.spring.Bean2"
parent="AbstractBean"> <property name="name" value="Jack"/> -------相当于函数覆写了一样 <property name="password"
value="123456"/> </bean> --------相当于子类继承了AbstractBean,拥有它的属性 <bean id = "bean3" class
= "com.bjsxt.spring.Bean3"
parent="AbstractBean"/> (*)依赖对象的注入方法可以有: (1).ref属性 (2).<ref>标签 (3).内部<bean>来定义,此时无需标注id Spring Bean的作用域(详见项目:spring_self_injection): 作用域属性scope可以取值: (i).singleton-----表示每次调用getBean时,返回相同的实例;(系统默认情况下是singleton的) (ii).prototype-----表示每次调用getBean时,返回不同的实例; Spring 对AOP知识(①采用annotation方式) 1、
引用相应的spring 架包 2、 采用Aspect定义切面 3、 在Aspect类中定义Pointcut和Advice 4、 启用Aspect对annotation的支持,并且将Aspect类和目标对象配置到Ioc容器中。 注意:这种方式定义中,切入点的方法是不被执行的,仅起到标识作用(即Advice通过该方法名找到相应切入点) Spring 对AOP知识(②采用配置文件方式)(详见项目:spring_aop2):在配置文件中写入相应的aspect切面(给出具体的所引对象)、Pointcut(切入点)(给定他的id(用于标识,便于advice找到在哪个切入点)和表达式(操作于哪些方法))和advice(具体的放法)(必须指定它的method(即自己添加的方法,与业务无关)和Pointcut-ref(指出切入点))。 配置文件中代码如下: <aop:config> <aop:aspect id = "securityAspect"
ref="securityHandler"> <aop:pointcut id="allMethods"
expression="execution(* com.bjsxt.spring.UserManagerImpl.add*(..))"/> <aop:after method="checkSecurity"
pointcut-ref="allMethods"/> </aop:aspect> </aop:config> Spring对AOP的支持(详见项目:spring_aop2): Aspect在默认情况下不用实现接口,但目标对象必须实现接口,如果没有实现接口,则必须引入CGLIB库 我们可以通过在advice的具体方法中添加JoinPoint参数,这个值可以由spring自动传入,从JoinPoint中可以获得参数值和方法名等等。(详见项目:spring_aop3) spring注入(setXxx()方法或构造函数法) 属性注入即通过setXxx()方法注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入是实际应用中最常用的注入方式。 代码如下: public class Foo { private String name;
public void setName(String name) {
this.name = name;
} public String toStirng(){
return "Foo Name is :" + this.name;
} } 相应配置文件中代码如下: <bean id="foo" class="com.tony.test.Foo">
<property name="name" value="Foo"/>
</bean> 构造函数注入 构造函数注入是除属性注入之外的另一种常用注入方式,它保证一些必要的属性在Bean实例化时就得到设置,它保证了Bean实例在实例化后就可以使用 代码: public class Foo { private String name;
private int age; public Foo(String name,int age){
this.name = name; this.age = age; } public String toStirng(){
return "Foo Name is :" + this.name;
} } 相应配置文件中代码: <bean id="foo" class="com.tony.test.Foo">
<constructor-arg type="int">
<value>20</value> </constructor-arg> <constructor-arg type="java.lang.String">
<value>Foo</value>
</constructor-arg> </bean> Spring配置中<bean>的id和name属性区别 1、在BeanFactory的配置中,<bean>是我们最常见的配置项,它有两个最常见的属性,即id和name,1.id属性命名必须满足XML的命名规范,因为id其实是XML中就做了限定的。总结起来就相当于一个Java变量的命名:不能以数字、符号打头,不能有空格,如123,?ad,"ab "等都是不规范的,Spring在初始化时就会报错,诸如:代码 2.name属性则没有这些限定,你可以使用几乎任何的名称,如?ab,123等,但不能带空格,如"a b","
abc",,这时,虽然初始化时不会报错,但在getBean()则会报出诸如以下的错误:代码 3.配置文件中不允许出现两个id相同的<bean>,否则在初始化时即会报错,如: 手工配置ssh事务管理器: <!-- 配置事务管理器 --> 这里创建了一个id为transactionManager的事务管理器,它匹配一个session工厂,<ref bean="sessionFactory"/>这个sessionFactory是指session工厂的ID。 3) 对事务管理器进行事务设置。增加如下代码: <tx:advice id="smAdvice"
transaction-manager="transactionManager"> 这里创建了一个advice(通知),对事务管理器进行事务设置,这里意思是指,对于以save、del、update开头的方法应用事务。 4) 下面就把事务应用到具体的类。看如下代码: <aop:config> 这里配置的作用是把我们上面创建的advice应用到具体的类中。以上代码的意思指,给test.service.impl下的所有类的所有方法应用smAdvice。 5) 示例:使用Session。 几种事物的传播特性 1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启。
|
|