Spring实例化bean之后的处理, 关于BeanPostProcessor接口的使用
业务需求:缓存页面,展示需要缓存的所有对象,每类对象在字典表中有编码对应,点击某个对象可以缓存某类对象,每类对象都有自己的缓存runner(弱弱的说一句,本人看到这里的第一反应就是if-else,捂脸中。。。。。。。。。。。)
方法:经经理指导,使用BeanPostProcessor接口
逻辑:自定义一个标签,spring实例化所有bean之后,取出每个便签的所对应的code,以及当前的code对应的runner放在一个管理器里面,使用时从管理器中取出
实例说明:
自定义标签
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target; import org.springframework.stereotype.Component; @Documented
@Retention(RUNTIME)
@Target({ TYPE, METHOD, PARAMETER })
@Component
public @interface CacheCode {
String code() default "";
}
不同类上面添加标签(根据自己业务放在类上)
import org.springframework.stereotype.Component; import com.*.cache.annotation.CacheCode; @Component
@CacheCode(code = "1001")
public class Test1 implements Test{ @Override
public void test() {
System.out.println("调用测试1"); } }
import org.springframework.stereotype.Component; import com.*.cache.annotation.CacheCode; @Component
@CacheCode(code = "1002")
public class Test2 implements Test{ @Override
public void test() {
    System.out.println("调用测试2");
} }
public interface Test {
    public void test();
}
管理器
@Component
public class CacheManager implements BeanPostProcessor{ private Map<String, Test> runners = new HashMap<String, Test>(); @Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
Class<? extends Object> persistentClass = bean.getClass();
CacheCode cacheCode = AnnotationUtils.findAnnotation(persistentClass, CacheCode.class);
if (null != cacheCode) {
String code = cacheCode.code();
Test runner = (Test)bean;
runners.put(code, runner);
}
return bean;
} public Test getRunner(String code) {
return runners.get(code);
}
}
测试结果


Spring实例化bean之后的处理, 关于BeanPostProcessor接口的使用的更多相关文章
- spring实例化bean三种方式
		我看了这篇博文<https://www.cnblogs.com/zhanglei93/p/6221546.html>,以及自己实践总结了关于spring实例化bean对象的3种方式. 一. ... 
- spring实例化bean的方式
		1.使用类构造器实现实例化(bean的自身构造器) <bean id = "orderService" class="cn.itcast.OrderServiceB ... 
- Spring实例化Bean的三种方式及Bean的类型
		1.使用类构造器实例化 [默认的类构造器] <bean id=“orderService" class="cn.itcast.OrderServiceBean"/ ... 
- Spring 实例化bean的方式
		实例化bean的方式有三种: 1.用构造器来实例化 2.使用静态工厂方法实例化 3.使用实例工厂方法实例化 当采用构造器来创建bean实例时,Spring对class并没有特殊的要求, 我们通常使用的 ... 
- Spring实例化bean的几种方式
		一,通过constructor实例化bean Spring可以实例化各种类型的类,不要求必须是JavaBean类型的类.在XML中配置类如下: <bean id="exampleBea ... 
- Spring实例化Bean三种方法:构造器、静态工厂、实例工厂
		Spring中Bean相当于java中的类,可以通过xml文件对bean进行配置和管理. 一.Bean的实例化: 构造器实例化.静态工厂实例化.实例工厂方式实例化. 目录: 构造器实例化: xml配置 ... 
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring实例化Bean的三种方法
		在面向对象的程序中,要想调用某个类的成员方法,就需要先实例化该类的对象.在 Spring 中,实例化 Bean 有三种方式,分别是构造器实例化.静态工厂方式实例化和实例工厂方式实例化. 构造器实例化 ... 
- 使用Spring实例化Bean的方法以及Bean取别名
		一.通过构造方法实例化Bean bean中加构造方法 public class Bean1 { public Bean1() { System.out.println("Bean1构造方法. ... 
- Spring实例化bean的三种方法
		1.用构造器来实例化 <bean id="hello2" class="com.hsit.hello.impl.ENhello" /> 2.使用静态 ... 
随机推荐
- [luogu4056 JSOI2009] 火星藏宝图 (贪心 dp)
			传送门 Solution 一个显然的贪心:选的点数越多越好.这个随便推推就知道了. 那么我们就贪心的从一列上挑最靠下的转移 直接转移不斜率优化复杂度\(O(nm)\),吸一口O2过了... Code ... 
- Servlet过滤器的使用
			Servlet过滤器的使用 制作人:全心全意 Servlet过滤器:Servlet过滤器与Servlet十分相似,但它具有拦截客户端请求的功能,Servlet过滤器可以改变请求中的内容,来满足实际开发 ... 
- request在作用域中管理属性
			request在作用域中管理属性 制作人:全心全意 在作用域中管理属性 setAttribute(String name,Object object) name:表示变量名,为String类型,在转发 ... 
- git 安装 使用
			git 安装--------------------------------------yum install git -y git 下载项目----------------------------- ... 
- Git——跟踪或取消跟踪文件
			在Git是用过程中,可能遇到以下情况: 1.被跟踪文件里面有不想跟踪的文件. 2.每次用git status查看状态时总是列出未被跟踪的文件. 解决方法: 1.当被跟踪的文件里面有不想跟踪的文件时,使 ... 
- https://segmentfault.com/a/1190000012844836---------关于SpringBoot上传图片的几种方式
			关于SpringBoot上传图片的几种方式 https://segmentfault.com/a/1190000012844836 
- [luoguP1280] 尼克的任务(DP)
			传送门 原本想着 f[i] 表示前 i 个任务的最优答案,但是不好转移 看了题解后,发现是 f[i] 表示前 i 分钟的最优解,看来还是不能死脑筋,思维得活跃,一个思路行不通就换一个思路. 把 f 数 ... 
- Javaweb中文乱码问题
			request.setCharacterEncoding("utf-8");必须写在获得参数之前,即request.getParameter();之前 
- Linux  tree 命令用法
			linux下的tree就比较强大了,但一般系统并不自带这个命令,需要手动下载安装:sudo apt-get install tree .文件很小,只有31K,但功能可强大了! tree命令的参数解释 ... 
- 深入解析Microsoft Sql server 2008
			http://blog.csdn.net/downmoon/article/details/5256548 
