精华内容
下载资源
问答
  • 动态加载bean
    千次阅读
    2017-08-23 14:44:08

    1,获得spring容器:

    import org.springframework.web.context.ContextLoader;    
    import org.springframework.web.context.WebApplicationContext;    
    
    WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();    
     wac.getBean("");   

    2,动态加载bean

    //将applicationContext转换为ConfigurableApplicationContext  
    ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) applicationContext;  
    
    // 获取bean工厂并转换为DefaultListableBeanFactory  
    DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableApplicationContext  
            .getBeanFactory();  
    
    // 通过BeanDefinitionBuilder创建bean定义  
    BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder  
            .genericBeanDefinition(UserService.class);  
    // 设置属性userAcctDAO,此属性引用已经定义的bean:userAcctDAO  
    beanDefinitionBuilder  
            .addPropertyReference("userAcctDAO", "UserAcctDAO");  
    
    // 注册bean  
    defaultListableBeanFactory.registerBeanDefinition("sdfds",  
            beanDefinitionBuilder.getRawBeanDefinition());  
    更多相关内容
  • 主要介绍了Spring动态加载bean后调用实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • spring动态加载bean

    千次阅读 2018-05-30 20:28:15
    废话不多说,直接上代码, ... protected Map,Remotes> remotes = new HashMap,Remotes>(); private static ApplicationContext ...此乃测试用例,通过类路径名称动态将其加入到容器中进行管理,针对不确定的实现类.

    废话不多说,直接上代码,



    private static final String[] strs= new String[]{"com.cdqj.admin.portal.test.web.RemoteOneImpl","com.cdqj.admin.portal.test.web.RemoteTwoImpl"};

    protected Map<Integer,Remotes> remotes = new HashMap<Integer,Remotes>();

    private static ApplicationContext _instance; 
     
    @Test
    public void instanceBeans() throws Exception {
    try {
    _instance = this.buildApplicationContext();
     
    ApplicationContext  context = this.getApplicationContext();

    ConfigurableApplicationContext  configurableApplicationContext  = (ConfigurableApplicationContext) context;  

    // 获取bean工厂并转换为DefaultListableBeanFactory
        DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableApplicationContext
                    .getBeanFactory();
        
        for(int i=0;i<strs.length;i++){
        String name = "one";
        if(i != 0){
        name = "two";
        }
       
        BeanDefinitionBuilder userBeanDefinitionBuilder = BeanDefinitionBuilder
                    .genericBeanDefinition(strs[i]);


        defaultListableBeanFactory.registerBeanDefinition(name,
                    userBeanDefinitionBuilder.getRawBeanDefinition());
        
        }
        
    Remotes remoteOne = (Remotes)context.getBean("one");
    Remotes remoteTwo = (Remotes)context.getBean("two");
    remoteOne.handler("one");
    remoteTwo.handler("one");
    System.out.println("加载成功");
    } catch (Exception e) {
    e.printStackTrace();
    }

    }

    public static ApplicationContext buildApplicationContext() { 
            return new ClassPathXmlApplicationContext("remoteContext.xml"); 
        } 

    /** 
         * 获取一个ApplicationContext对象 
         * 
         * @return ApplicationContext 
         */ 
        public static ApplicationContext getApplicationContext() { 
            return _instance; 

        }

    此乃测试用例,通过类路径名称动态将其加入到容器中进行管理,针对不确定的实现类.

    展开全文
  • 通过applicationContext去动态加载bean

    千次阅读 2018-07-30 11:20:07
    <bean class="com.example.demo.pojo.User" id="User" />   由于是springboot所以要配置下扫描这个applicationContext.xml @SpringBootApplication() @ImportResource("classpath:applicationContext....

    1.网上很多方法的

    https://www.ktanx.com/blog/p/326

    2.我使用的是springboot 然后上面链接最后一种方法

    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Component;
    
    @Component
    public class SpringContextUtil implements ApplicationContextAware {
        // Spring应用上下文环境
        private static ApplicationContext applicationContext;
        /**
         * 实现ApplicationContextAware接口的回调方法,设置上下文环境
         *
         * @param applicationContext
         */
        public void setApplicationContext(ApplicationContext applicationContext) {
            SpringContextUtil.applicationContext = applicationContext;
        }
        /**
         * @return ApplicationContext
         */
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
        /**
         * 获取对象
         *
         * @param name
         * @return Object
         * @throws BeansException
         */
        public static Object getBean(String name) throws BeansException {
            return applicationContext.getBean(name);
        }
    }
    

     

    SpringContextUtil.getApplicationContext().getBean("User",User.class);

     

    applicationContext.xml放在resourse下

    <?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 class="com.example.demo.pojo.User" id="User" />
    </beans>

     

    由于是springboot所以要配置下扫描这个applicationContext.xml

    @SpringBootApplication()
    @ImportResource("classpath:applicationContext.xml")
    public class DemoApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(DemoApplication.class, args);
    	}
    }

    spring的话再web.xml引入这个applicationContext.xml

     

    展开全文
  • 在平时工作中可能经常会遇见一些这类需求:(先看代码) <bean id="a" class="com.classB"> <property name="prop1" value="?.../bean> <bean id="b" class="com.classA"> <prop...

    在平时工作中可能经常会遇见一些这类需求:(先看代码)

        <bean id="a" class="com.classB">
            <property name="prop1" value="?" />
        </bean>
    
        <bean id="b" class="com.classA">
            <property name="prop2" ref="a" />
        </bean>

    如代码所示,如果我们需要根据不同的需求对classB 的prp1属性赋予不同的值,那么一种很简单的方法就是通过classB 的set等方法进行重新赋值。另外还有一种就是通过判断,为每种情况都定义一个不同属性的值。比如

        <bean id="a" class="com.classB">
            <property name="prop1" value="val1" />
        </bean>
    
        <bean id="b" class="com.classA">
            <property name="prop2" ref="a" />
        </bean>
    
        <bean id="a1" class="com.classB">
            <property name="prop1" value="val2" />
        </bean>
    
        <bean id="b1" class="com.classA">
            <property name="prop2" ref="a1" />
        </bean>

    这样我们在code里面通过对参数等情况进行判断,然后加载不同的bean.但是这肯定不是一段很友好的代码,如果我很大的项目都需要,那么是否全部都需要写两遍呢?这应该是不被允许的。那么是否还有另外的方法呢? 我在google相关方法时看见一个比较好的答案。这里面介绍了两种方法,我尝试了其中一种,能够很好的完成我的需求。

    public static void main(String[] args) {
        DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
        BeanDefinition beanDefinition = BeanDefinitionBuilder
                .rootBeanDefinition(Arrays.class, "asList")
                .addConstructorArgValue(args)
                .getBeanDefinition();
        beanFactory.registerBeanDefinition("args", beanDefinition);
    
        GenericApplicationContext parentContext= new GenericApplicationContext(beanFactory);
        parentContext.refresh();
    
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                new String[] { "app-context.xml" }, parentContext);
    }
    
    
    //相应的xml文件配置
     <bean id="a" class="com.classB">
            <property name="prop1" value="#{args[0]}" />
        </bean>
    
        <bean id="b" class="com.classA">
            <property name="prop2" ref="a" />
        </bean>

    他的思路就是另外创建一个application context,将你的命令(command lins)通过一个list进行存储并且将之定义为一个bean。随后我们将这个context作为项目context的parentcontext。这个parentcontext会在context之前完成初始化。

    展开全文
  • spring实现动态加载javabean方法,一个接口多个实现,根据参数不同加载不同的实现类。
  • spring动态加载bean的方法

    千次阅读 2013-03-04 15:37:44
    通过以下方法动态获取spring bean,主要用于通过一个bean字符串转换成bean的实例。 1、定义bean上下文操作方法     import org.springframework.beans.BeansException; import org.springframework.beans....
  • Spring Boot 加载Bean的几种方式

    千次阅读 2022-04-02 11:15:08
    01、探索springboot的加载bean几种方式 springboot启动类上的注解是一个复合注解: @SpringBootConfiguration 配置类 + @Bean 配置类作用:方便扩展、方便集成,不受包约束。 @EnableAutoConfiguration ...
  • 前有log4j高危漏洞,后有fastjson注入风险,可见即便是强大的中间件jar也不可避免的存在bug,今天花时间写了一个SpringBoot动态注入bean到容器中的demo,直接上代码 这是一个暴漏出去的Controller,用来接收注入的...
  • Spring Bean加载方式【8种】

    千次阅读 2022-04-18 13:37:38
    本文讲述了Spring bean 的八种加载方式,包含的内容足以应付大多数场景
  • spring 重新动态加载数据库或xml中的bean,可以不用重启tomcat
  • spring动态加载Bean

    千次阅读 2015-09-26 13:46:02
    需求 有两个类Class B1和Class B2同时implements接口B; Class A依赖于接口B(I Mean Class...方案看来需要根据场景来定义interface B对应的Bean了。基本的办法可以分为三种: 简单粗暴型:直接在XML配置文件里面搞定;
  • spring 动态注册bean

    千次阅读 2018-01-31 21:25:03
    spring 动态注册bean 如果应用代码需要注册没有被spring容器管理的代码,则需要使用BeanDefinition实例来实现。spring应用可以注册BeanDefinition通过BeanDefinitionRegistry类的方法。 void ...
  • 主要介绍了如何正确控制springboot中bean加载顺序总结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • 3.spring加载bean的过程是什么呢 Bean 容器找到配置文件中 Spring Bean 的定义。 Bean 容器利用 Java Reflection API 创建一个Bean的实例。 如果涉及到一些属性值 利用 set()方法设置一些属性值。 如果 Bean 实现了...
  • Spring Bean 加载顺序 .

    2016-10-13 16:18:50
    Spring Bean 加载顺序 实验小例子
  • spring的bean动态加载则需要对相应的bean进行动态注册,以及jar与class文件动态加载。测试示例中是spring boot 的部分代码,动态加载的内容为接口实现类,且初始化时加载本地的实现类,动态加载后改为非程序加载目录...
  • @Autowired private ApplicationContext applicationContext; // 可以为接口或者业务方法被调用 public void reloadInstance(){ //获取上下文 DefaultListableBeanFactory ... } 通过以上代码可实现 重新加载Bean
  • 好久没写博客了,前几天在项目中用到了在系统启动时候用redis 加载数据,我就在思考,启动的时候加载数据,那就应该是配置一个bean,至于spring的bean是单例模式,不在本次的讨论范围之内,我记得是spring启动的实例...
  • 基于Groovy实现Spring Bean动态加载

    万次阅读 2016-08-07 20:45:09
    Spring对Groovy有着良好的支持,能把Groovy实现类作为Bean来使用,在前一篇Blog《Spring对Groovy Bean的支持》... Bean可以实现Bean动态修改,但还有一个缺陷,即无法动态加载/卸载Bean,本文基于Spring Applicatio
  • SpringBoot动态创建Bean

    万次阅读 2016-05-09 11:59:50
    * 这里的conditional是一个可选条件,表示当这个表达式为true的时候,才动态创建bean */ @ConditionalOnExpression("${my.configuration.enabled}") public class DynamicConfiguration { @Autowired private ...
  • Spring加载bean的顺序

    千次阅读 2022-05-16 10:27:51
    如果在某个Bean加载过程中调用还没来得及加载Bean的方法,则(还没来得及加载Bean)会懒加载Bean。 @Bean public String fun2() { System.out.println("fun2"); Api api1 = fun1(); System.out.println...
  • spring加载bean的流程

    千次阅读 2021-10-15 19:28:47
    BeanPostProcessor:后置处理bean,它是bean级别的,可以在springbean的初始化前后对bean进行增强。使用时直接实现这个接口,然后加到ioc容器中即可。 BeanFactoryPostProcessor:他可以对springbean的对bean...
  • Object bean = autowireCapableBeanFactory.autowire(StudentDao.class, AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, true); StudentDao studentDao = (StudentDao)bean; studentDao.add();
  • Spring加载Bean: AbstractBeanFactory.xmind
  • Spring的bean加载流程

    千次阅读 2022-06-25 16:42:47
    spring的bean记载流程
  • 背景:项目本来就是springboot+springJpa的框架,连接池用的德鲁伊DruidDataSource。 想要在数据库配置多数据源,用户可以随便新增数据源,根据请求带的不同...2.启动之后加载数据库的数据源 并且加载bean交给sp...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 302,634
精华内容 121,053
关键字:

动态加载bean