您的位置:首页 > 编程语言

初入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);

}

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: