/*****************************************************************************************************/
10:48 2017/10/19 静态切面编程
/*****************************************************************************************************/
·对于Spring框架,每一层都有专门的注解:
|-:DAO层专门的注解是:@Repository
|-:Service层专门的注解是:@Service
|-: Action层专门的注解是:@Controller
·Spring中的切面编程(AOP)
添加新功能,但是源码不让动。一种思想,在不动原先代码的基础上,横向的加入新的代码。
·如果要添加一个日志,那么就写一个类,把类里面的东西添加到日志里面。
然后再写一个Dao:UserInfoDao,实现同一个接口。
所以用接口,继承接口就可以实现在不动原先代码的基础上,横向的加入新的代码。
原先的代码不可以动,但是注解可以动。
·范例:
(1)、Action层:
package com.wk.action;
import javax.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import com.wk.model.user;
import com.wk.service.impl.IUserService;
/**
* 完成与界面层的传值和跳转
* 负责与页面的传值和跳转。
* @author dellpc
*
*/
//@Component("userAction")
@Controller("Action")
@Scope("prototype")//表示多例
public class Action{
private user user;
private int id;
private IUserService userService;
public Action() {
super();
}
public Action(IUserService userService) {
super();
this.userService = userService;
}
public IUserService getUserService() {
return userService;
}
//依赖注入的注解形式:<property name="userService" ref = "userService"></property>
@Resource
public void setUserService(IUserService userService) {
this.userService = userService;
}
public user getUser() {
return user;
}
public void setUser(user user) {
this.user = user;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public void add(){
userService.add(user);
}
public void delete(){
userService.delete(id);
}
}
(2)、AOP类:
package com.wk.aop;
public class Info {
public static void info(String msg){
System.out.println(msg+"进行了操作");
}
}
(3)、Dao类;
package com.wk.dao;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import com.wk.dao.impl.IUserDao;
import com.wk.model.user;
//相当于<bean id="UserDao" class=""/>
//@Component("userDao")
@Repository("UserDao") //配置文件中Id的值
public class UserDao implements IUserDao{
@Override
public void add(user user) {
// TODO Auto-generated method stub
System.out.println("添加一个用户"+user.getUsername());
}
@Override
public void delete(int id) {
// TODO Auto-generated method stub
System.out.println("删除一个用户");
}
@Override
public user load(int id) {
// TODO Auto-generated method stub
System.out.println("查询一个用户");
return null;
}
@Override
public void update(user user) {
// TODO Auto-generated method stub
System.out.println("修改一个用户");
}
}
(4)、要额外添加功能就在写一个类,且跟原先的dao类继承同一个接口。
package com.wk.dao;
import javax.annotation.Resource;
import org.springframework.stereotype.Repository;
import com.wk.aop.Info;
import com.wk.dao.impl.IUserDao;
import com.wk.model.user;
@Repository("UserInfoDao")
public class UserInfoDao implements IUserDao{
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
@Resource
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void add(user user) {
// TODO Auto-generated method stub
Info.info("张三"+"2017.11.2");
userDao.add(user);
}
@Override
public void delete(int id) {
// TODO Auto-generated method stub
}
@Override
public user load(int id) {
// TODO Auto-generated method stub
return null;
}
@Override
public void update(user user) {
// TODO Auto-generated method stub
}
}
(4)、Dao接口。
package com.wk.dao.impl;
import com.wk.model.user;
public interface IUserDao {
public void add(user user);
public void delete(int id);
public user load(int id);
public void update(user user);
}
(5)、user实体类:
package com.wk.model;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component("user")
@Scope("prototype")
public class user {
private int id;
private String username;
private String password;
public user() {
super();
}
public user(int id, String username, String password) {
super();
this.id = id;
this.username = username;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void show(){
System.out.println("hello Spring");
}
}
(6)、service类:
package com.wk.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import com.wk.dao.UserDao;
import com.wk.dao.impl.IUserDao;
import com.wk.model.user;
import com.wk.service.impl.IUserService;
/**
* 这里的增删改插应该调用dao层的。只是业务逻辑处理的枢纽,具体操作还要靠各个实体类。
* @author dellpc
*
*/
//@Component("UserService")
@Service("UserService")
public class UserService implements IUserService{
private IUserDao userDao;
public IUserDao getUserDao() {
return userDao;
}
@Resource(name="UserInfoDao") //注入了即就是把UserInfoDao对象给了userDao
public void setUserDao(IUserDao userDao) {
this.userDao = userDao;
}
@Override
public void add(user user) {
// TODO Auto-generated method stub
userDao.add(user);
}
@Override
public void delete(int id) {
// TODO Auto-generated method stub
userDao.delete(id);
}
@Override
public user load(int id) {
// TODO Auto-generated method stub
userDao.load(id);
return null;
}
@Override
public void update(user user) {
// TODO Auto-generated method stub
userDao.update(user);
}
}
(7)、service接口:
package com.wk.service.impl;
import com.wk.model.user;
/**
* 处理业务逻辑
* 以面向接口编程的形式,较为灵活。
* 1、加密或解密。
* 2、异常处理。
* 3、验证码的问题。
* @author dellpc
*
*/
public interface IUserService {
public void add(user user);
public void delete(int id);
public user load(int id);
public void update(user user);
}
(8)、测试类:
package com.wk.test;
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.wk.action.Action;
import com.wk.model.user;
public class TestUser {
@Test
public void test02() {
//加载xml配置文件
BeanFactory factory = new ClassPathXmlApplicationContext("beans.xml");
Action userAction = factory.getBean("Action", Action.class);
user user = new user(1,"张三","123");
userAction.setUser(user);
userAction.add();
Action userAction2 = factory.getBean("Action", Action.class);
//userAction2.add();
System.out.println(userAction == userAction2);
}
}
(9)、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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 打开注解 -->
<context:annotation-config/>
<!-- 到哪包下找注解 -->
<context:component-scan base-package="com.wk"></context:component-scan>
</beans>
注:上述代码实现切面编程。
10:48 2017/10/19 静态切面编程
/*****************************************************************************************************/
·对于Spring框架,每一层都有专门的注解:
|-:DAO层专门的注解是:@Repository
|-:Service层专门的注解是:@Service
|-: Action层专门的注解是:@Controller
·Spring中的切面编程(AOP)
添加新功能,但是源码不让动。一种思想,在不动原先代码的基础上,横向的加入新的代码。
·如果要添加一个日志,那么就写一个类,把类里面的东西添加到日志里面。
然后再写一个Dao:UserInfoDao,实现同一个接口。
所以用接口,继承接口就可以实现在不动原先代码的基础上,横向的加入新的代码。
原先的代码不可以动,但是注解可以动。
·范例:
(1)、Action层:
package com.wk.action;
import javax.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import com.wk.model.user;
import com.wk.service.impl.IUserService;
/**
* 完成与界面层的传值和跳转
* 负责与页面的传值和跳转。
* @author dellpc
*
*/
//@Component("userAction")
@Controller("Action")
@Scope("prototype")//表示多例
public class Action{
private user user;
private int id;
private IUserService userService;
public Action() {
super();
}
public Action(IUserService userService) {
super();
this.userService = userService;
}
public IUserService getUserService() {
return userService;
}
//依赖注入的注解形式:<property name="userService" ref = "userService"></property>
@Resource
public void setUserService(IUserService userService) {
this.userService = userService;
}
public user getUser() {
return user;
}
public void setUser(user user) {
this.user = user;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public void add(){
userService.add(user);
}
public void delete(){
userService.delete(id);
}
}
(2)、AOP类:
package com.wk.aop;
public class Info {
public static void info(String msg){
System.out.println(msg+"进行了操作");
}
}
(3)、Dao类;
package com.wk.dao;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import com.wk.dao.impl.IUserDao;
import com.wk.model.user;
//相当于<bean id="UserDao" class=""/>
//@Component("userDao")
@Repository("UserDao") //配置文件中Id的值
public class UserDao implements IUserDao{
@Override
public void add(user user) {
// TODO Auto-generated method stub
System.out.println("添加一个用户"+user.getUsername());
}
@Override
public void delete(int id) {
// TODO Auto-generated method stub
System.out.println("删除一个用户");
}
@Override
public user load(int id) {
// TODO Auto-generated method stub
System.out.println("查询一个用户");
return null;
}
@Override
public void update(user user) {
// TODO Auto-generated method stub
System.out.println("修改一个用户");
}
}
(4)、要额外添加功能就在写一个类,且跟原先的dao类继承同一个接口。
package com.wk.dao;
import javax.annotation.Resource;
import org.springframework.stereotype.Repository;
import com.wk.aop.Info;
import com.wk.dao.impl.IUserDao;
import com.wk.model.user;
@Repository("UserInfoDao")
public class UserInfoDao implements IUserDao{
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
@Resource
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void add(user user) {
// TODO Auto-generated method stub
Info.info("张三"+"2017.11.2");
userDao.add(user);
}
@Override
public void delete(int id) {
// TODO Auto-generated method stub
}
@Override
public user load(int id) {
// TODO Auto-generated method stub
return null;
}
@Override
public void update(user user) {
// TODO Auto-generated method stub
}
}
(4)、Dao接口。
package com.wk.dao.impl;
import com.wk.model.user;
public interface IUserDao {
public void add(user user);
public void delete(int id);
public user load(int id);
public void update(user user);
}
(5)、user实体类:
package com.wk.model;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component("user")
@Scope("prototype")
public class user {
private int id;
private String username;
private String password;
public user() {
super();
}
public user(int id, String username, String password) {
super();
this.id = id;
this.username = username;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void show(){
System.out.println("hello Spring");
}
}
(6)、service类:
package com.wk.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import com.wk.dao.UserDao;
import com.wk.dao.impl.IUserDao;
import com.wk.model.user;
import com.wk.service.impl.IUserService;
/**
* 这里的增删改插应该调用dao层的。只是业务逻辑处理的枢纽,具体操作还要靠各个实体类。
* @author dellpc
*
*/
//@Component("UserService")
@Service("UserService")
public class UserService implements IUserService{
private IUserDao userDao;
public IUserDao getUserDao() {
return userDao;
}
@Resource(name="UserInfoDao") //注入了即就是把UserInfoDao对象给了userDao
public void setUserDao(IUserDao userDao) {
this.userDao = userDao;
}
@Override
public void add(user user) {
// TODO Auto-generated method stub
userDao.add(user);
}
@Override
public void delete(int id) {
// TODO Auto-generated method stub
userDao.delete(id);
}
@Override
public user load(int id) {
// TODO Auto-generated method stub
userDao.load(id);
return null;
}
@Override
public void update(user user) {
// TODO Auto-generated method stub
userDao.update(user);
}
}
(7)、service接口:
package com.wk.service.impl;
import com.wk.model.user;
/**
* 处理业务逻辑
* 以面向接口编程的形式,较为灵活。
* 1、加密或解密。
* 2、异常处理。
* 3、验证码的问题。
* @author dellpc
*
*/
public interface IUserService {
public void add(user user);
public void delete(int id);
public user load(int id);
public void update(user user);
}
(8)、测试类:
package com.wk.test;
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.wk.action.Action;
import com.wk.model.user;
public class TestUser {
@Test
public void test02() {
//加载xml配置文件
BeanFactory factory = new ClassPathXmlApplicationContext("beans.xml");
Action userAction = factory.getBean("Action", Action.class);
user user = new user(1,"张三","123");
userAction.setUser(user);
userAction.add();
Action userAction2 = factory.getBean("Action", Action.class);
//userAction2.add();
System.out.println(userAction == userAction2);
}
}
(9)、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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 打开注解 -->
<context:annotation-config/>
<!-- 到哪包下找注解 -->
<context:component-scan base-package="com.wk"></context:component-scan>
</beans>
注:上述代码实现切面编程。