一所需架包 spring commom-logging.jar spring.jar 註解 common-annotation.jar aop面向切麵 aspectjrt.jar aspectjweaver.jar cglibb-nodep.ja(許可權帶代理proxy) jdbc database
一所需架包
spring
commom-logging.jar spring.jar
註解
common-annotation.jar
aop面向切麵
aspectjrt.jar aspectjweaver.jar cglibb-nodep.ja(許可權帶代理proxy)
jdbc database
common-pool.1.6.jar common-dbhp.jar mysql-connector-bin-*.*.*.jar
二
配置文件的模板beans.xml
<?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:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
</beans>
以上模板引入了面向切麵(aop),許可權代理(context)以及資料庫操作(tx)的命名空間
三基本使用
1.創建bean對象
1.1預設通過set
<bean id="persionBean" class="com.my.PersionBean.impl.PersionBean" destroy-method="destory" lazy-init="true" init-method="init"></bean>
1.2通過靜態工廠(factory-method)
<bean id="persionBean2" class="com.my.PersionBean.impl.PersionBeanFactory" lazy-init="true" factory-method="creBeanFactory"></bean>
1.3通過工廠非靜態
<bean id="persionBean3" class="com.my.PersionBean.impl.PersionFactory" ></bean>
<bean id="persionBean4" factory-bean="persionBean3" scope="prototype" factory-method="createOrderFactory"></bean>
2.註入bean
<property name="persion" ref="persionBean4" ></property>
3.註入其他屬性
<property name="name" value="校長"></property>
<property name="age" value="15"></property>
<property name="habits">
4.註入List<>屬性
<property name="habits">
<list>
<value>第一個</value>
<value>第二個</value>
<value>第三個</value>
</list>
</property>
5.通過<constructor-arg index="0" value="xiaozhang"></constructor-arg>(構造函數index參數索引)
6.對象的創建scope
scope="prototype" 實體模式(多個對象)
scope="singleton"單例模式(default)在容器只有一個對象
另外還有session,request 域
通過註解方式註入
<context:annotation-config/>//開啟註解
通過@Resource(name="student")指定bean的id註入 通過@Autowired@Qualifier(value="student")(命名id)註入
通過註解方式創建bean
@Component (任何)
@Repository(value="student")(數據訪問)
@Controller(控制)
@Service(服務)
. @Scope("prototype")(指定域)
@PostConstruct(初始化方法)
@PreDestroy(銷毀方法)
7.aop切麵
使用jdk進行許可權代理
必須有介面
@Aspect
public class MyIntercepter {
@Pointcut("execution (* com.my.aop.impl.PersionServiceBean.*(..))")
private void anyMethod() {//聲明切入點
}
@Before("anyMethod()&&args(name)")
private void doAccessCheck(String name){
System.out.println("這是前置通知");
}
@AfterReturning(pointcut="anyMethod()",returning="result")
private String doAfterReturn(String result){
System.out.println("這是後置通知"+result);
return result;
}
@AfterThrowing("anyMethod()")
private void doAfterThrow(){
System.out.println("這是例外通知");
}
@After("anyMethod()")
private void doAfter(){
System.out.println("這是最終通知");
}
@Around("anyMethod()")
public Object around(ProceedingJoinPoint point) throws Throwable{
System.out.println("這是環繞通知");
Object resultObject=point.proceed();
System.out.println("推出");
return resultObject;
}
使用cglib註解方式 <aop:aspectj-autoproxy/>(啟動註解)
public class MyIntercepter {
@Pointcut("execution (* com.my.aop.impl.PersionServiceBean.*(..))")
private void anyMethod() {//聲明切入點
}
@Before("anyMethod()&&args(name)")
private void doAccessCheck(String name){
System.out.println("這是前置通知");
}
@AfterReturning(pointcut="anyMethod()",returning="result")
private String doAfterReturn(String result){
System.out.println("這是後置通知"+result);
return result;
}
@AfterThrowing("anyMethod()")
private void doAfterThrow(){
System.out.println("這是例外通知");
}
@After("anyMethod()")
private void doAfter(){
System.out.println("這是最終通知");
}
@Around("anyMethod()")
public Object around(ProceedingJoinPoint point) throws Throwable{
System.out.println("這是環繞通知");
Object resultObject=point.proceed();
System.out.println("推出");
return resultObject;
}
}
使用xml
<aop:aspectj-autoproxy/>
<bean id="persionServiceBean" class="com.my.aop.impl.PersionServiceBean"></bean>
<bean id="interceptor" class="com.my.aop.impl.myInterceptor"> </bean>
<aop:config>
<aop:aspect id="aspect" ref="interceptor">
<aop:pointcut expression="execution (* com.my.aop.impl.PersionServiceBean.*(..))" id="mycut"/>
<aop:before method="doAccessCheck" pointcut-ref="mycut"/>
<aop:around method="around" pointcut-ref="mycut"/>
</aop:aspect>
</aop:config>
spring對jdbc操作
<context:property-placeholder location="classpath:jdbc.properties"/>(引入屬性文件)
(創建dataSource) <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${driverClassName}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
<property name="maxActive" value="${maxActive}"></property>
<property name="initialSize" value="${initialSize}"></property>
<property name="maxIdle" value="${maxIdle}"></property>
<property name="minIdle" value="${minIdle}"></property>
</bean>
<bean id="txManager" (創建事物bean)class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
以註解方式
<tx:annotation-driven transaction-manager="txManager" />(啟動註解)
以xml
<aop:config>
<aop:pointcut expression="execution(* com.my.jdbc.service.impl.StudentService.*(..))" id="transactionPointCut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointCut"/>
</aop:config>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" propagation="NOT_SUPPORTED"/>
<tx:method name="*" />
</tx:attributes>
</tx:advice>
詳細見例子