Spring容器动态注入bean
来源:互联网 发布:it公司 编辑:程序博客网 时间:2024/06/06 03:13
以往向Spring中注入bean实例都是通过配置文件的方式,如果容器已经启动配置文件已经解析,那我们也只能手动的用代码方式来完成实例Bean的注入。
<bean id="xxxx" class="xxxxxxx.xxxxx"/>
Spring上下文对象的获取方式
//Spring上下文
ApplicationContext ac = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
//Spring mvc上下文
//ApplicationContext sac = RequestContextUtils.getWebApplicationContext(request);
实例操作
@RequestMapping(value="regbean.do") public void regBean(HttpServletRequest request){ ApplicationContext ac = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext()); ConfigurableApplicationContext context = (ConfigurableApplicationContext) ac; //Bean的实例工厂 DefaultListableBeanFactory dbf = (DefaultListableBeanFactory) context.getBeanFactory(); //Bean构建 BeanService.class 要创建的Bean的Class对象 BeanDefinitionBuilder dataSourceBuider = BeanDefinitionBuilder. genericBeanDefinition(BeanService.class); //向里面的属性注入值,提供get set方法 dataSourceBuider.addPropertyValue("msg", "hello "); //dataSourceBuider.setParentName(""); 同配置 parent //dataSourceBuider.setScope(""); 同配置 scope //将实例注册spring容器中 bs 等同于 id配置 dbf.registerBeanDefinition("bs", dataSourceBuider.getBeanDefinition()); //注要使用刚注册的 必须通过 getBean("xx")的方式 //这种方式还多用于在过滤器中获取容器对象,因为spring不能为过滤器注入任何属性 } BeanService.classpublic class BeanService { private String msg; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public void say(){ System.out.println("====="+msg); } }============下面是注册多个DataSource 和SessionFactory的过程===========
//datasource注册。下面的一些配置可以持久化到别的地方,任意更具需求来。//在通过此方法就可以创建多个datasourc和sessionfactory然后动态切换。多个数据库之间必须启用全局事物配置 //创建的时候 先判断是否存在 ,ac1.containsBean("xx") //<span style="font-family: Arial;">ComboPooledDataSource.class 这个是c3p0的datasource</span> BeanDefinitionBuilder dataSourceBuider = BeanDefinitionBuilder .genericBeanDefinition(ComboPooledDataSource.class); dataSourceBuider.addPropertyValue("driverClass", "oracle.jdbc.OracleDriver"); dataSourceBuider.addPropertyValue("jdbcUrl", "jdbc:oracle:thin:@192.168.1.95:1521:orcl"); dataSourceBuider.addPropertyValue("user","oracle"); dataSourceBuider.addPropertyValue("password","oracle"); dbf.registerBeanDefinition("datasource3", dataSourceBuider.getBeanDefinition()); //LocalSessionFactoryBean注册,注册时候在获取结果不再是它本身而是sessionFactory BeanDefinitionBuilder llfb = BeanDefinitionBuilder .genericBeanDefinition(LocalSessionFactoryBean.class); //这里的属性对应配置文件或者LocalSessionFactoryBean源码中的属性来,自己去看看就晓得 llfb.addPropertyValue("dataSource", (DataSource)ac1.getBean("datasource3")); //mappingResources 是配置文件方式,下面的是注解的方式 llfb.addPropertyValue("annotatedClasses", new Class<?>[]{com.lwp.entity.T.class}); Properties p = new Properties(); p.setProperty("hibernate.show_sql", "true"); p.setProperty("hibernate.format_sql", "true"); p.setProperty("hibernate.dialect", "org.hibernate.dialect.OracleDialect"); llfb.addPropertyValue("hibernateProperties",p); dbf.registerBeanDefinition("lsf", llfb.getBeanDefinition());
这里获取上面刚注册的LocalSessionFactoryBean,结果是SessionFactory类对象不再是它本身类型。会默认调用里面的getObject()
SessionFactory sf2 = (SessionFactory)ac1.getBean("lsf");
0 0
- Spring容器动态注入bean
- 动态注入Bean到Spring容器
- 基于Spring容器Bean的动态注入
- Spring容器注入bean
- 过滤器中使用spring容器注入bean
- Spring动态管理IoC容器中的Bean
- spring容器通过动态代理获取bean
- 在servlet中注入spring容器中的bean
- 在servlet中注入spring容器中的bean
- 五、Spring容器中Bean的属性值的注入
- IOC容器注入Spring bean——XML篇
- Spring:IOC释义(Bean容器、注解、依赖注入)
- JSP页面调用Spring容器注入的Bean
- JSP页面中调用Spring容器注入的Bean
- 动态注入Spring中的Bean实例快速指南
- IOC 容器中Bean 注入
- Spring动态获取IoC容器中管理的Bean
- Spring的bean注入
- 给定正整数n和m,计算出n个元素的集合{1,2,...,n}可以划分为多少个不同的由m个元素组成的子集合
- Win32控制台程序是什么
- 子类、父类各种方法的执行顺序
- DSP/BIOS使用之初窥门径——滴答时钟及烧写Flash
- Hadoop管理员的十个最佳实践
- Spring容器动态注入bean
- LINUX学习笔记
- POJ_2262
- HDFS文件操作
- bootstrap之hello world
- PCB设计资料:看到最后才知道是福利
- Factory Methods 工厂方法
- UIImagePickerController 获取相册、相机图片的名字等信息
- tomcat 配置https