手动添加webapp包,包下建立WEB-INF,及建立web.xml文件即可正常使用;添加tomcat的依赖,找到tomcat的run方法即可运行web项目;
添加spring的依赖
spring-context: 添加完成后自动导入6个相关的依赖,在pom.xml中 添加如下图的依赖
<bean id="girl " class="(类名,自动导入全包名)" scope=" 默认值 singlrton ">
<property name=" " value=" " />使用无参的构造器
<constructor-arg name=" " value=" " />使用有参的构造器
<property name=" " ref=" " />对象的导入用
有参构造方法name不写,默认重上倒下的顺序,也可以使用index=" "比较 0开始, type=" "类型标记
</bean>
ApplicationContext ac =new ClassPathXmlApplicationContext("bean.xml");读取这个文件
ac.getBean("b1");得到项目的数据
spring 添加 P 属性 点击 namespace 勾选 p 属性,勾选上之后再xml中就会多一条p属性的连接;
<bean id=" " class=" " p:成员变量=" " ></bean> 添加变量;
<bean id=" " class=" " p:成员变量-ref=" " ></bean> 添加对象;
ac.close;最后要关闭资源
java代理
代理对象存在的价值主要用于拦截对真实业务对象的访问.代理对象应该具有和目标对象相同的方法(真实业务对象).
第一种创建方式
public class UserFactory {
public static IUserServicegetUserService(){
IUserService us =new UserservcieImpl();
MyAspect ma =new MyAspect();
IUserService ius = (IUserService) Proxy.newProxyInstance(UserFactory.class.getClassLoader(), us.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Objectinvoke(Object proxy, Method method, Object[] args)throws Throwable {
ma.before();
Object obj = method.invoke(us, args);
ma.after();
return obj;
}
});
return ius;
}
}
第二种创建方式
使用Spring中的一个增强类来实现aop方式
* 1. 创建Enhancer对象
* 2. 设置增强类Enhancer的superClass
* 3. 设置Enhancer对象的回调
* 4. 通过eh对象的create()方法来得到指定的对象
public class UserFactory {
public static IUserServicegetUserService() {
Enhancer en =new Enhancer(); //创建Enhancer对象
MyAspect my =new MyAspect();
en.setSuperclass(lianxi2.IUserService.class);//设置增强类Enhancer的superClass
en.setCallback(new MethodInterceptor() {//设置Enhancer对象的回调
public Objectintercept(Object o, Method method, Object[] objects, MethodProxy methodProxy)throws Throwable {
my.before();
Object obj = method.invoke(objects);
my.after();
return null;
}
});
IUserService ius= (IUserService) en.create();//通过eh对象的create()方法来得到指定的对象
return ius;
}
第三种实现方式
beans.xml配置 (要放在resources资源下):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="us" class="com.qfedu.aop03.UserServiceImpl" />
<bean id="my" class="com.qfedu.aop03.MyAspect" />
<!--
ProxyFactoryBean代理的FactoryBean对象,我们现在要代理的是us
包含四个属性注入:
1. interfaces: 接口对象们
<list>
<value>com.qfedu.aop03.IUserService</value>
<value>com.qfedu.aop03.IUserService</value>
<value>com.qfedu.aop03.IUserService</value>
</list>
2. target:目标对象,哪个对象将被以代理的方式创建
3. interceptorNames:拦截对象的名称,自定义的MethodInterceptor对象,注意它的包结构组成
4. optimize:boolean类型的值:
true:强制使用cglib的动态代理方式
false:使用jdk自带的动态代理
cglib:code generation library,代码生成库,性能更高
-->
<bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="interfaces" value="com.qfedu.aop03.IUserService" />
<property name="target" ref="us" />
<property name="interceptorNames" value="my" />
<property name="optimize" value="true" />
</bean>
</beans>
Myaspect
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class MyAspect implements MethodInterceptor {
private void before(){
System.out.println("---------before----------");
}
private void after(){
System.out.println("---------after----------");
}
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
before();
// 业务处理方法的调用
Object obj = invocation.proceed();
after();
return obj;
}
}
测试类:
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestAOP03 {
@Test
public void testAOP03(){
ApplicationContext ac = new ClassPathXmlApplicationContext("com/qfedu/aop03/beans.xml");
IUserService us = ac.getBean("proxy", IUserService.class);
Object o = new Object();
System.out.println(us.getAllUser());
System.out.println(us.deleteUser(1));
System.out.println(us.saveUser(o));
System.out.println(us.updateUser(o));
}
}