package com.fxr.spring.action;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.fxr.spring.model.User;
import com.fxr.spring.service.UserService;
@Controller("useraction")//MVC控制层一般使用@Controller
@Scope("prototype")//设置为多例模式
public class UserAction {
private User u;
private int id;
private UserService userservice;
private List<String>names;
public List<String> getNames() {
return names;
}
public void setNames(List<String> names) {
this.names = names;
}
public UserAction(){
}
public User getU() {
return u;
}
public void setU(User u) {
this.u = u;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public UserService getUserservice() {
return userservice;
}
@Resource
public void setUserservice(UserService userservice) {
this.userservice = userservice;
}
public void add(){
userservice.add(u);
}
public void delete(){
userservice.delete(id);
}
}
=================================================
package com.fxr.spring.dao;
import com.fxr.spring.model.User;
public interface IUserDao {
public void add(User u);
public void delete(int id);
}
package com.fxr.spring.dao;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import com.fxr.spring.model.User;
//@Component("userdao")//公共的创建bean的Annotation
@Repository("userdao")//@Repository一般用于DAO的注入
public class UserDao implements IUserDao{
@Override
public void add(User u) {
System.out.println("添加"+u);
}
@Override
public void delete(int id) {
System.out.println("删除"+id);
}
}
package com.fxr.spring.dao;
import javax.annotation.Resource;
import org.springframework.stereotype.Repository;
import com.fxr.spring.model.User;
import com.fxr.spring.util.Logger;
@Repository("userproxydao")
public class UserProxyDao implements IUserDao{
private IUserDao user;
public IUserDao getUser() {
return user;
}
@Resource
public void setUser(IUserDao user) {
this.user = user;
}
@Override
public void add(User u) {
Logger.info("添加用户");
System.out.println("添加"+u);
}
@Override
public void delete(int id) {
Logger.info("删除用户");
System.out.println("删除"+id);
}
}
package com.fxr.spring.model;
public class User {
private int id;
private String name;
public User(int id,String name){
this.id = id;
this.name = name;
}
public User(){
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
}
package com.fxr.spring.service;
import com.fxr.spring.dao.UserDao;
import com.fxr.spring.model.User;
public interface IUserService {
public void add(User u);
public void delete(int id);
}
package com.fxr.spring.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import com.fxr.spring.dao.IUserDao;
import com.fxr.spring.dao.UserDao;
import com.fxr.spring.model.User;
@Component("userservice")
@Service("userservice")//业务层一般使用@Service
public class UserService implements IUserService{
private IUserDao userdao;
public IUserDao getUserdao() {
return userdao;
}
@Resource(name="userDynamicDao")
public void setUserdao(IUserDao userdao) {
this.userdao = userdao;
}
@Override
public void add(User u) {
userdao.add(u);
}
@Override
public void delete(int id) {
userdao.delete(id);
}
}
package com.fxr.spring.test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.fxr.spring.action.UserAction;
import com.fxr.spring.model.HelloWorld;
import com.fxr.spring.model.User;
public class Test {
private static BeanFactory factory = new ClassPathXmlApplicationContext("bean.xml");
public static void main(String[] args) {
// //创建一个类
// HelloWorld hello = (HelloWorld) factory.getBean("helloworld");
// hello.say();
//创建一个类
UserAction ua1 = (UserAction) factory.getBean("useraction");
User u = new User(1,"张三");
ua1.setU(u);
ua1.add();
// UserAction ua2 = (UserAction) factory.getBean("useraction");
// ua2.add();
}
}
package com.fxr.spring.util;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class LogProxy implements InvocationHandler{
//创建对象
private Object target;
private LogProxy(){}
//3:创建一个方法生成对象,这个方法的参数就是要代理的对象,getInstance所返回的对象就是代理的对象
public static Object getInstance(Object o){
//3.1创建LogProxy对象
LogProxy proxy = new LogProxy();
//3.2设置这个代理的对象
proxy.target = o;
//3.3通过Proxy的方法创建代理对象,第一个参数就是要代理的对象的classLoader
//第二个参数就是要代理对象实现的接口,第三个参数就是实现类InvocationHandler的对象
//此时的result就是一个代理对象,代理的是o
Object result = Proxy.newProxyInstance(o.getClass().getClassLoader(), o.getClass().getInterfaces(), proxy);
return result;
}
/**
* 当有了这个代理对象之后,不管这个代理对象执行什么方法,都会调用以下的invoke的方法
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Logger.info("进行相应的操作");
Object obj = method.invoke(target, args);
return obj;
}
}
<?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">
<!-- 打开Spring的Annotation支持 -->
<context:annotation-config/>
<!-- 设定Spring 去哪些包中找Annotation -->
<context:component-scan base-package="com.fxr.spring"/>
<bean id="userDynamicDao" class="com.fxr.spring.util.LogProxy" factory-method="getInstance">
<constructor-arg ref="userdao"/>
</bean>
</beans>