概述:主要讲解如何使用Aspectj进行AOP开发、如何使用pojo+xml开发AOP和spring来征服数据库jdbc。
一、使用Aspectj进行AOP开发
a) 首先导入jar支持
Aspectjrt.jar
aspectjweaver.jar
b) 修改xml配置文件
i. 增加aop schema
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
</beans>
ii. 激活注解,启动所有注解
<!--激活注解的使用 -->
<aop:aspectj-autoproxy/>
c) 编写java类,并用@Aspect注解成通知
i. 注解简介
AspectJ 支持 5 种类型的通知注解:
@Before: 前置通知, 在方法执行之前执行
@After: 后置通知, 在方法执行之后执行
@AfterReturning: 返回通知, 在方法返回结果之后执行
@AfterThrowing: 异常通知, 在方法抛出异常之后
@Around: 环绕通知, 围绕着方法执行
ii. 参数讲解
@Pointcut("execution(* cn.csdn..*.work(..))")
修饰符 第一个*返回值类型
第二个*(包名+类名)work(..)
..参数任意
iii. 声明切入点
@Pointcut("execution(* cn.csdn..*.work(..))")
public void disp(){}
iv. 其他方法引入切入点方法
@Before("disp()")
public void getUp() {
System.out.println("...............懒虫该起床了.");
}
v. 在配置文件中配置这个类
<!-- 声明通知 -->
<bean id="aspectUtil" class="cn.csdn.advice.AspectUtil"/>
二、使用pojo+xml开发AOP
首先定义好自己java的类,里面有相应的通知的方法然后则就可以配置xml来完成功能
<!--切面的bean的声明-->
<bean id="adviceUtil" class="cn.csdn.advice.AdviceUtil"/>
<!--aop的配置 包括通知和切面-->
<aop:config>
<!--配置一个切入点-->
<aop:pointcut expression="execution(* *.*word(..))" id="myPointcut"/>
<!--配置一个带有参数的连接点-->
<aop:pointcut expression="execution(* *.*word(..)) and args(name,pass)" id="myPointcut1"/>
<!--配置切面-->
<aop:aspect ref="adviceUtil">
<!--配置前置通知-->
<aop:before method="getUp" pointcut-ref="myPointcut" />
<!--配置环绕通知 方法中需要有 ProceedingJoinPoint的参数-->
<aop:around method="punchCard" pointcut-ref="myPointcut"/>
<!--配置后置通知-->
<aop:after method="goHome" pointcut-ref="myPointcut" />
<!--配置返回通知 returning指定返回值的参数-->
<aop:after-returning method="back" pointcut-ref="myPointcut" returning="ss" />
<!--配置异常通知 throwing指定异常对象参数-->
<aop:after-throwing method="unWell" pointcut-ref="myPointcut" throwing="ex" />
<!-- 引入通知 -->
<aop:declare-parents types-matching="*..EmployeeServiceBean"
implement-interface="cn.csdn.advice.Auditable" default-impl="cn.csdn.advice.AuditableAdvice" />
<!--配置前置通知。 带有参数-->
<aop:before method="checkLogin" pointcut-ref="myPointcut1"/>
</aop:aspect>
</aop:config>
三、征服数据库jdbc
a) 引入jar支持
commons-dbcp.jar
commons-pool.jar
mysql-connector-java-5.1.16-bin.jar sql的驱动jar包,如果是oracle或其他的,请自行更换对应的驱动jar包
b) 创建配置文件,用来存储数据源的信息
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/spring
username=root
password=123456
<context:property-placeholder location="jdbc.properties" />
c) 然后在xml配置数据源
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>${driverClassName}</value>
</property>
<property name="url">
<value>${url}</value>
</property>
<property name="username">
<value>${username}</value>
</property>
<property name="password">
<value>${password}</value>
</property>
</bean>
d) 配置jdbcTemplate模板类,导入数据源
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
e) 创建Dao和DaoImpl实现类 并在配置文件进行配置
<!-- 注入到Dao操作实现类中 -->
<bean id="adminDaoImpl" class="cn.csdn.dao.AdminDaoImpl">
<!-- 注入模板类对象 -->
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
f) 然后就可以实现处理了,使用query查询来得到数据库中的数据
public List<Admin> findAll() {
//使用模板类对象
List<Admin> admins = jdbcTemplate.query("select id,name from admin", new RowMapper() {
@Override
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
Admin admin = new Admin();
admin.setId(rs.getInt("id"));
admin.setName(rs.getString("name"));
return admin;
}
});
return admins;
}
g) Spring提供需要jdbc的模版对象,可以根据自己的需要来使用,只要将数据源注入进入就可以来使用该对象做自己的Dao处理。比如NamedParameterJdbcTemplate,SimpleJdbcTemplate对象。也可以不用在Dao生成该对象的实例,可以直接继承于JdbcDaoSupport、NamedParameterJdbcDaoSupport、SimpleJdbcDaoSupport该类,则使用get方法就可以得到模块对象来对做处理