samples包
samples包含aop包和各个类
aop包
AfterReturningAdviceImpl类
package com.lv.spring.samples.aop;
import com.lv.spring.aop.advice.AfterReturningAdvice;
import java.lang.reflect.Method;
/**
* Created by lvyanghui
* 2019/1/11 11:29
*/
public class AfterReturningAdviceImpl implements AfterReturningAdvice{
@Override
public void afterReturing(Object returnValue, Method method, Object[] args,Object target) {
System.out.println("后置增强调用 afterMethod 方法.......");
}
}
MethodBeforeAdviceImpl类
package com.lv.spring.samples.aop;
import com.lv.spring.aop.advice.MethodBeforeAdvice;
import java.lang.reflect.Method;
/**
* Created by lvyanghui
* 2019/1/11 11:27
*/
public class MethodBeforeAdviceImpl implements MethodBeforeAdvice {
@Override
public void beforeMethod(Method method, Object[] args, Object target) {
System.out.println("前置增强调用beforeMethod方法.......");
}
}
MethodInterceptorImpl类
package com.lv.spring.samples.aop;
import com.lv.spring.aop.advice.MethodInterceptor;
import java.lang.reflect.Method;
/**
* Created by lvyanghui
* 2019/1/11 11:32
*/
public class MethodInterceptorImpl implements MethodInterceptor {
@Override
public Object invoke(Method method, Object[] args, Object target) throws Exception{
System.out.println("环绕增强调用 aroundMethod 方法.......前");
Object result = method.invoke(target,args);
System.out.println("环绕增强调用 aroundMethod 方法.......后");
return result;
}
}
samples其他类
ABean类
package com.lv.spring.samples;
/**
* Created by lvyanghui
* 2018/12/19 16:44
*/
public class ABean {
public void initMethod(){
System.out.println("ABean 执行初始化方法.....");
}
public void methodA(){
System.out.println("ABean 执行methodA.......");
}
public void destoryA(){
System.out.println("ABean 执行destoryA.......");
}
}
ABeanFactory类
package com.lv.spring.samples;
/**
* Created by lvyanghui
* 2018/12/19 16:44
*/
public class ABeanFactory {
public static ABean getBeanByFactory(){
return new ABean();
}
public ABean getBeanByFactoryBean(){
return new ABean();
}
}
AopBean类
package com.lv.spring.samples;
/**
* Created by lvyanghui
* 2019/1/11 15:59
*/
public class AopBean {
public String methodOne(int i, String name){
System.out.println("调用methodOne......" + i + name);
return name;
}
public void methodTwo(){
System.out.println("调用 methodTwo......");
}
}
BBean类
package com.lv.spring.samples;
/**
* Created by lvyanghui
* 2018/12/19 16:44
*/
public class BBean {
private String name;
private ABean aBean;
public BBean() {
}
public BBean(String name) {
this.name = name;
}
public BBean(String name, ABean aBean) {
this.name = name;
this.aBean = aBean;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ABean getaBean() {
return aBean;
}
public void setaBean(ABean aBean) {
this.aBean = aBean;
}
}
BBeanFactory类
package com.lv.spring.samples;
/**
* Created by lvyanghui
* 2018/12/19 16:44
*/
public class BBeanFactory {
public static BBean getBeanByFactory(String name, ABean aBean){
return new BBean();
}
public BBean getBeanByFactoryBean(String name, ABean aBean,String kk){
return new BBean();
}
}
CBean类
package com.lv.spring.samples;
/**
* Created by lvyanghui
* 2018/12/25 11:16
*/
public class CBean {
private DBean dBean;
public CBean(DBean dBean) {
this.dBean = dBean;
}
}
DBean类
package com.lv.spring.samples;
/**
* Created by lvyanghui
* 2018/12/25 11:16
*/
public class DBean {
private CBean cBean;
public DBean(CBean cBean) {
this.cBean = cBean;
}
}
EBean类
package com.lv.spring.samples;
/**
* Created by lvyanghui
* 2018/12/25 11:33
*/
public class EBean {
private String name;
private int age;
private ABean aBean;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public ABean getaBean() {
return aBean;
}
public void setaBean(ABean aBean) {
this.aBean = aBean;
}
}
test包
AopTest类
package com.lv;
import com.lv.spring.aop.AdvisorAutoProxyCreator;
import com.lv.spring.aop.advisor.AspectJPointCutAdvisor;
import com.lv.spring.bean.GenericBeanDefinition;
import com.lv.spring.bean.PreBuildBeanFactory;
import com.lv.spring.samples.AopBean;
import com.lv.spring.samples.aop.AfterReturningAdviceImpl;
import com.lv.spring.samples.aop.MethodInterceptorImpl;
import com.lv.spring.samples.aop.MethodBeforeAdviceImpl;
import org.junit.Test;
/**
* Created by lvyanghui
* 2019/1/11 16:29
*/
public class AopTest {
static PreBuildBeanFactory beanFactory = new PreBuildBeanFactory();
@Test
public void aopTest()throws Exception{
GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setBeanClass(AopBean.class);
beanFactory.registerBeanDefinition("aop",beanDefinition);
beanDefinition = new GenericBeanDefinition();
beanDefinition.setBeanClass(MethodBeforeAdviceImpl.class);
beanFactory.registerBeanDefinition("beforeAdvice",beanDefinition);
beanDefinition = new GenericBeanDefinition();
beanDefinition.setBeanClass(AfterReturningAdviceImpl.class);
beanFactory.registerBeanDefinition("afterAdvice",beanDefinition);
beanDefinition = new GenericBeanDefinition();
beanDefinition.setBeanClass(MethodInterceptorImpl.class);
beanFactory.registerBeanDefinition("aroundAdvice",beanDefinition);
AdvisorAutoProxyCreator creater = new AdvisorAutoProxyCreator();
beanFactory.registryBeanPostProcessor(creater);
creater.registryAdvisor(new AspectJPointCutAdvisor("execution(* com.lv.spring.samples.AopBean.method*(..))","afterAdvice"));
creater.registryAdvisor(new AspectJPointCutAdvisor("execution(* com.lv.spring.samples.AopBean.method*(..))","aroundAdvice"));
creater.registryAdvisor(new AspectJPointCutAdvisor("execution(* com.lv.spring.samples.AopBean.method*(..))","beforeAdvice"));
beanFactory.preInstantiateSingletons();
AopBean aopBean = (AopBean)beanFactory.getBean("aop");
aopBean.methodTwo();
aopBean.methodOne(1,"jjj");
}
}
BeanFactoryDITest类
package com.lv;
import com.lv.spring.bean.BeanRefernerce;
import com.lv.spring.bean.GenericBeanDefinition;
import com.lv.spring.bean.PreBuildBeanFactory;
import com.lv.spring.bean.PropertyValue;
import com.lv.spring.samples.ABean;
import com.lv.spring.samples.BBean;
import com.lv.spring.samples.BBeanFactory;
import com.lv.spring.samples.EBean;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
/**
* Created by lvyanghui
* 2018/12/19 16:46
*/
public class BeanFactoryDITest {
static PreBuildBeanFactory beanFactory = new PreBuildBeanFactory();
@Test
public void registerConstructorDI()throws Exception{
GenericBeanDefinition bd = new GenericBeanDefinition();
bd.setBeanClass(ABean.class);
beanFactory.registerBeanDefinition("aa01", bd);
bd = new GenericBeanDefinition();
bd.setBeanClass(BBean.class);
List defs = new ArrayList<>();
defs.add("lvyanghui");
defs.add(new BeanRefernerce("aa01"));
bd.setConstructorArgumentValues(defs);
beanFactory.registerBeanDefinition("bb01",bd);
beanFactory.preInstantiateSingletons();
BBean bBean = (BBean)beanFactory.getBean("bb01");
System.out.println(bBean);
}
@Test
public void registerStaticFactoryMethod()throws Exception{
GenericBeanDefinition bd = new GenericBeanDefinition();
bd.setBeanClass(ABean.class);
beanFactory.registerBeanDefinition("aa02", bd);
bd = new GenericBeanDefinition();
bd.setBeanClass(BBeanFactory.class);
bd.setFactoryMethodName("getBeanByFactory");
List defs = new ArrayList<>();
defs.add("lvyanghui");
defs.add(new BeanRefernerce("aa02"));
bd.setConstructorArgumentValues(defs);
beanFactory.registerBeanDefinition("BBeanFactory",bd);
beanFactory.preInstantiateSingletons();
BBean bBean = (BBean)beanFactory.getBean("BBeanFactory");
System.out.println(bBean);
}
@Test
public void registerFactoryMethod()throws Exception{
GenericBeanDefinition bd = new GenericBeanDefinition();
bd.setBeanClass(ABean.class);
beanFactory.registerBeanDefinition("aa03", bd);
bd = new GenericBeanDefinition();
bd.setBeanClass(BBeanFactory.class);
String fbname = "factory";
beanFactory.registerBeanDefinition(fbname, bd);
bd = new GenericBeanDefinition();
bd.setFactoryBeanName(fbname);
bd.setFactoryMethodName("getBeanByFactoryBean");
List defs = new ArrayList<>();
defs.add("lvyanghui");
defs.add(new BeanRefernerce("aa03"));
defs.add("ssssss");
bd.setConstructorArgumentValues(defs);
beanFactory.registerBeanDefinition("BBeanFactory01",bd);
beanFactory.preInstantiateSingletons();
BBean bBean = (BBean)beanFactory.getBean("BBeanFactory01");
System.out.println(bBean);
}
@Test
public void registerPropertyDI()throws Exception{
GenericBeanDefinition bd = new GenericBeanDefinition();
bd.setBeanClass(ABean.class);
beanFactory.registerBeanDefinition("aa04", bd);
bd = new GenericBeanDefinition();
bd.setBeanClass(EBean.class);
PropertyValue property1 = new PropertyValue("name","lvyang");
PropertyValue property2 = new PropertyValue("age",20);
BeanRefernerce beanRefernerce = new BeanRefernerce("aa04");
PropertyValue property3 = new PropertyValue("aBean",beanRefernerce);
List<PropertyValue> propertyValues = new ArrayList<>();
propertyValues.add(property1);
propertyValues.add(property2);
propertyValues.add(property3);
bd.setPropertyValues(propertyValues);
beanFactory.registerBeanDefinition("ee",bd);
beanFactory.preInstantiateSingletons();
EBean eBean = (EBean)beanFactory.getBean("ee");
System.out.println(eBean.getName() + eBean.getAge() + eBean.getaBean());
System.out.println(eBean);
}
}
BeanFactoryTest类
package com.lv;
import com.lv.spring.bean.BeanDefinition;
import com.lv.spring.bean.BeanDefinitionRegistryException;
import com.lv.spring.bean.DefaultBeanFactory;
import com.lv.spring.bean.GenericBeanDefinition;
import com.lv.spring.samples.ABean;
import com.lv.spring.samples.ABeanFactory;
import org.junit.AfterClass;
import org.junit.Test;
/**
* Created by lvyanghui
* 2018/12/19 16:46
*/
public class BeanFactoryTest {
static DefaultBeanFactory beanFactory = new DefaultBeanFactory();
@Test
public void register()throws BeanDefinitionRegistryException{
GenericBeanDefinition bd = new GenericBeanDefinition();
bd.setBeanClass(ABean.class);
//bd.setScope("singleton");
//bd.setScope("prototype");
bd.setInitMethodName("initMethod");
bd.setDestroyMethodName("destoryA");
beanFactory.registerBeanDefinition("aa", bd);
}
@Test
public void registerStaticFactoryMethod()throws BeanDefinitionRegistryException{
GenericBeanDefinition bd = new GenericBeanDefinition();
bd.setBeanClass(ABeanFactory.class);
bd.setFactoryMethodName("getBeanByFactory");
beanFactory.registerBeanDefinition("ABeanFactory", bd);
}
@Test
public void registerFactoryMethod()throws BeanDefinitionRegistryException{
GenericBeanDefinition bd = new GenericBeanDefinition();
bd.setBeanClass(ABeanFactory.class);
String fbname = "factory";
beanFactory.registerBeanDefinition(fbname, bd);
bd = new GenericBeanDefinition();
bd.setScope(BeanDefinition.SCOPE_PROTOTYPE);
bd.setFactoryBeanName(fbname);
bd.setFactoryMethodName("getBeanByFactoryBean");
beanFactory.registerBeanDefinition("ABeanFactory01",bd);
}
@AfterClass
public static void testFactory()throws Exception{
System.out.println("spring 构造方式------------");
for (int i = 0; i < 3; i++) {
ABean abean = (ABean)beanFactory.getBean("aa");
System.out.println(abean);
}
System.out.println("spring 静态工厂方式------------");
for (int i = 0; i < 3; i++) {
ABean abean = (ABean)beanFactory.getBean("ABeanFactory");
System.out.println(abean);
}
System.out.println("spring 工厂方法方式------------");
for (int i = 0; i < 3; i++) {
ABean abean = (ABean)beanFactory.getBean("ABeanFactory01");
System.out.println(abean);
}
}
}
CirculationDiTest类
package com.lv;
import com.lv.spring.bean.BeanRefernerce;
import com.lv.spring.bean.GenericBeanDefinition;
import com.lv.spring.bean.PreBuildBeanFactory;
import com.lv.spring.samples.CBean;
import com.lv.spring.samples.DBean;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
/**
* Created by lvyanghui
* 2018/12/25 11:15
*/
public class CirculationDiTest {
static PreBuildBeanFactory beanFactory = new PreBuildBeanFactory();
@Test
public void testCirculationDi()throws Exception{
GenericBeanDefinition bd = new GenericBeanDefinition();
bd.setBeanClass(CBean.class);
List defscc = new ArrayList<>();
defscc.add(new BeanRefernerce("dd"));
bd.setConstructorArgumentValues(defscc);
beanFactory.registerBeanDefinition("cc", bd);
bd = new GenericBeanDefinition();
bd.setBeanClass(DBean.class);
List defsdd = new ArrayList<>();
defsdd.add(new BeanRefernerce("cc"));
bd.setConstructorArgumentValues(defsdd);
beanFactory.registerBeanDefinition("dd",bd);
DBean dBean = (DBean)beanFactory.getBean("dd");
System.out.println(dBean);
}
}