Java动态代理实战(二):dao接口无实现类且自动注册到Spring容器

接前一篇文章

Java动态代理实战(一):在Spring中实现代理接口无实现类注入

 

自动注册到spring容器代码

//注意需要配置让Spring能扫描到此路径
@Component
public class ProxyDaoRegister implements ApplicationContextAware, BeanDefinitionRegistryPostProcessor {

	@Override
	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {

	}

	@Override
	public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
		// 需要被代理的接口
        Class cls = UserTestDao.class;
        BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(cls);
        GenericBeanDefinition definition = (GenericBeanDefinition) builder.getRawBeanDefinition();
        //这里是相当于调用BaseDaoProxyFactory中的setInterfaceClass()方法,详细的可以了解spring相关资料
        definition.getPropertyValues().add("interfaceClass", definition.getBeanClassName());
        // FactoryBean是一种特殊的Bean,这里的BeanClass是生成Bean实例的工厂,不是Bean本身。其返回的是该工厂Bean的getObject方法所返回的对象。
        definition.setBeanClass(BaseDaoProxyFactory.class);
        definition.setAutowireMode(GenericBeanDefinition.AUTOWIRE_BY_TYPE);
        // 注册dao
        registry.registerBeanDefinition("userTestDao", definition);
	}

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

	}
}

使用方式:直接使用@Autowired注入就可以

@Service("userTestService")
public class UserTestServiceImpl {
	@Autowired
	private UserTestDao testDao;
	
	public void test() {
		testDao.delete(1l);
	}
}

下一篇文章:Java动态代理实战(三):dao接口无实现类且使用注解自动注册

你可能感兴趣的:(Spring,JAVA,spring,java,jdk动态代理)