• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

springboot 实现bean手动注入操作

springboot 搞代码 4年前 (2022-01-09) 37次浏览 已收录 0个评论

1、springboot启动类实现接口ApplicationListener<ContextRefreshedEvent>,实现方法onApplicationEvent,初始化上下文

package test.projectTest;
import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
import org.springframework.boot.system.ApplicationPidFileWriter;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import test.projectTest.util.SpringContextUtil;
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class})
@SpringBootApplication(scanBasePackages={"test.projectTest"})
public class TestApplication implements ApplicationListener<ContextRefreshedEvent>
{
 public static void main( String[] args )
 {
  SpringApplication application = new SpringApplication(TestApplication.class);
  application.addListeners(new ApplicationPidFileWriter());
  application.run(args);
  System.out.println( "启动成功" );
 }
 @Override
 public void onApplicationEvent(ContextRefreshedEvent event) {
  SpringContextUtil.setApplicationContext(event.getApplicationContext());  
 }
}

2.SpringContextUtil工具类初始化ApplicationContext applicationContext

package test.projectTest.util;
import org.springframework.context.ApplicationContext;
/**
 * 获取spring容器,以访问容器中定义的其他bean
 */
public class SpringContextUtil{
 //spring上下文
 private static ApplicationContext applicationContext;
 
 /**
  * 实现ApplicationCon<i style="color:transparent">本文来源gaodai$ma#com搞$$代**码)网8</i>textAware接口的回调方法,设置上下文环境
  * @param applicationContext
  */
 public static void setApplicationContext(ApplicationContext applicationContext){
  if(null==SpringContextUtil.applicationContext)
   SpringContextUtil.applicationContext=applicationContext;
 }
 
 public static ApplicationContext getApplicationContext(){
  return applicationContext;
 }
  /**
  * 通过name获取 Bean.
  *
  * @param name
  * @return
  */
 public static Object getBean(String name) {
  return getApplicationContext().getBean(name);
 }
 /**
  * 通过name获取 Bean.
  *
  * @param clazz
  * @return
  */
 public static <T> T getBean(Class<T> clazz) {
  return getApplicationContext().getBean(clazz);
 }
 /**
  * 通过name,以及Clazz返回指定的Bean
  *
  * @param name
  * @param clazz
  * @return
  */
 public static <T> T getBean(String name, Class<T> clazz) {
  return getApplicationContext().getBean(name, clazz);
 }
}

3.获取bean

package test.projectTest.util;
import test.projectTest.mapper.slave.DailyDataMapper;
public class TestUtil{ 
 private static DailyDataMapper dailyDataMapper; 
 static{//手动注入bean
  if(dailyDataMapper==null){
   dailyDataMapper = (DailyDataMapper)SpringContextUtil.getBean("dailyDataMapper");
  }
 }
 public static void test(){
  dailyDataMapper.selectByPrimaryKey(1);
 } 
}

补充:springboot中bean的实例化和属性注入过程

springboot版本(2.0.4 RELEASE)

大致描述springboot中bean的实例化和属性注入过程流程

1) 在某一时刻Spring调用了Bean工厂的getBean(beanName)方法。beanName可能是simpleController,或者simpleService,simpleDao,顺序没关系(因为后面会有依赖关系的处理)。我们假设simpleController吧


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:springboot 实现bean手动注入操作
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址