初入aop面向切面编程
2017-03-01 18:34
120 查看
Aop面向切面编程:可扩展性强,是对oop(面向对象编程)的一个补充和完善。oop采用的是继承,封装,多态,建立一种对象的层次机构,用来描述一个公共行为的一个集合。当我们需要为分散的对象引入公共行为oop显得无能为力。oop是从上到下的关系,不适合从左到右。例如日志。它与分散对象的核心功能毫无关系,采用Aop减少代码量。
Aop技术分类:动态代理技术,静态植入方式。
下面是一些代码演示:
这是在spring-servlet.xml的aop配置
可以通过配置bean横向切入,也可以通过注解来实现,下面是注解演示代码
@Aspect
@Component
public class PointCuts {
//自己定义切入点
@Pointcut("execution(* com.leige.service.*.*(..))")
public void a(){};
/*@Before("a()")*/
public void before (){
System.out.println("插入数据");
}
@After("execution(public boolean com.leige.service.UserService.inserIntoUser(com.leige.entity.User))")
public void after(){
System.out.println("插入数据结束");
}
//@AfterReturning("a()")
public void afterReturning(){
System.out.println("after return");
}
@AfterThrowing("a()")
public void afterThroeing(){
System.out.println("抛异常了");
}
//@Around("a()")
public Object around(ProceedingJoinPoint pjp) throws Throwable{
//Throwable Exception 两者范围
System.out.println("kkkkkkkkk");
Object obj = pjp.proceed();
System.out.println("jjjjjjjjjjjjj");
return obj;
}
}
UserDao层的代码。添加用户的方法
@Repository(value="userDao")
public class UserDao implements com.leige.impl.UserDao {
@Resource(name="dataSource")
private DataSource dataSource;
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
@Override
/**
* 添加用户
*/
public boolean insertUser(User user) {
String username = user.getName();
String password = user.getPassword();
int age = user.getAge();
if (username == null || password == null || username == ""
|| password == "") {
return false;
}
Connection conn = null;
PreparedStatement ps = null;
try {
// 获得连接
conn = dataSource.getConnection();
// 定义sql语句
String sql = "insert into user (name,password,age)values(?,?,?)";
// 通过连接对象获得预处理语句,加载sql语句
ps = conn.prepareStatement(sql);
// 设置问号参数
ps.setString(1, username);
ps.setString(2, password);
ps.setInt(3, age);
// 执行更新
ps.executeUpdate();
return true;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
ps.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("关流失败");
e.printStackTrace();
} finally {
try {
ps.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return false;
}
Service业务层代码
@Service("userService")
public class UserService {
@Resource(name="userDao")
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
//添加用户
public boolean inserIntoUser(User user){
boolean flag = userDao.insertUser(user);
return flag;
}
UserController控制层代码
@Controller
@RequestMapping("/userController")
public class UserController {
@Resource(name="userService")
private UserService userService;
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
@RequestMapping("/insert")
/**
* 添加用户信息
* @param user
* @return boolean
*/
public String inserIntoUser(User user){
System.out.println("1111");
boolean flag = userService.inserIntoUser(user);
System.out.println("2222");
if (flag) {
System.out.println("注册成功");
return "success";
}else {
System.out.println("注册失败");
return "fail";
}
}
Demo测试
public static void main(String[] args) {
ApplicationContext context = new FileSystemXmlApplicationContext("WebRoot/WEB-INF/springmvc-servlet.xml");
UserController uc = (UserController) context.getBean("userController");
User user = new User();
user.setAge(12);
user.setName("磊哥");
user.setPassword("222222");
uc.inserIntoUser(user);
}
运行结果:
Aop技术分类:动态代理技术,静态植入方式。
下面是一些代码演示:
这是在spring-servlet.xml的aop配置
可以通过配置bean横向切入,也可以通过注解来实现,下面是注解演示代码
@Aspect
@Component
public class PointCuts {
//自己定义切入点
@Pointcut("execution(* com.leige.service.*.*(..))")
public void a(){};
/*@Before("a()")*/
public void before (){
System.out.println("插入数据");
}
@After("execution(public boolean com.leige.service.UserService.inserIntoUser(com.leige.entity.User))")
public void after(){
System.out.println("插入数据结束");
}
//@AfterReturning("a()")
public void afterReturning(){
System.out.println("after return");
}
@AfterThrowing("a()")
public void afterThroeing(){
System.out.println("抛异常了");
}
//@Around("a()")
public Object around(ProceedingJoinPoint pjp) throws Throwable{
//Throwable Exception 两者范围
System.out.println("kkkkkkkkk");
Object obj = pjp.proceed();
System.out.println("jjjjjjjjjjjjj");
return obj;
}
}
UserDao层的代码。添加用户的方法
@Repository(value="userDao")
public class UserDao implements com.leige.impl.UserDao {
@Resource(name="dataSource")
private DataSource dataSource;
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
@Override
/**
* 添加用户
*/
public boolean insertUser(User user) {
String username = user.getName();
String password = user.getPassword();
int age = user.getAge();
if (username == null || password == null || username == ""
|| password == "") {
return false;
}
Connection conn = null;
PreparedStatement ps = null;
try {
// 获得连接
conn = dataSource.getConnection();
// 定义sql语句
String sql = "insert into user (name,password,age)values(?,?,?)";
// 通过连接对象获得预处理语句,加载sql语句
ps = conn.prepareStatement(sql);
// 设置问号参数
ps.setString(1, username);
ps.setString(2, password);
ps.setInt(3, age);
// 执行更新
ps.executeUpdate();
return true;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
ps.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("关流失败");
e.printStackTrace();
} finally {
try {
ps.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return false;
}
Service业务层代码
@Service("userService")
public class UserService {
@Resource(name="userDao")
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
//添加用户
public boolean inserIntoUser(User user){
boolean flag = userDao.insertUser(user);
return flag;
}
UserController控制层代码
@Controller
@RequestMapping("/userController")
public class UserController {
@Resource(name="userService")
private UserService userService;
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
@RequestMapping("/insert")
/**
* 添加用户信息
* @param user
* @return boolean
*/
public String inserIntoUser(User user){
System.out.println("1111");
boolean flag = userService.inserIntoUser(user);
System.out.println("2222");
if (flag) {
System.out.println("注册成功");
return "success";
}else {
System.out.println("注册失败");
return "fail";
}
}
Demo测试
public static void main(String[] args) {
ApplicationContext context = new FileSystemXmlApplicationContext("WebRoot/WEB-INF/springmvc-servlet.xml");
UserController uc = (UserController) context.getBean("userController");
User user = new User();
user.setAge(12);
user.setName("磊哥");
user.setPassword("222222");
uc.inserIntoUser(user);
}
运行结果:
相关文章推荐
- 深入探索spring技术内幕(七): 配置Spring AOP面向切面编程
- 面向切面编程(AOP)的理解
- Spring之AOP(面向切面编程)
- AOP面向切面编程(三)
- Android面向切面编程(AOP)
- Spring框架(二)--AOP面向切面编程
- 大数据WEB阶段Spring框架 AOP面向切面编程(二)
- Spring:Aop面向切面编程
- 面向切面编程(AOP)的理解
- 轻松理解AOP思想(面向切面编程)
- 第五章 面向切面编程(AOP)之二
- Spring boot之AOP面向切面编程
- SpringBoot学习笔记——第三节,面向切面编程(AOP)
- Spring(4)——面向切面编程(AOP模块)
- spring的IOC(控制反转)与AOP(面向切面编程)
- 面向切面编程(AOP)的理解
- spring的AOP面向切面编程
- AOP面向切面编程
- 面向切面编程(AOP)
- 【spring框架】(三)面向切面编程(AOP)