多构造器的类,如何通过Spring 注解进行依赖注入,通过Spring管理Bean

问题:我写了一个BaseMyBatisDAOImpl ,该类中需要依赖SqlSessionTemplate 。SqlSessionTemplate 的构造器有3中(含参数和不含参数的构造器)。我想完全通过注解方式实现依赖注入,又能通过Spring来管理BaseMyBatisDAOImpl。在使用的时候,根据场景,需要使用SqlSessionTemplate 默认构造器进行实例化,有时候需要SqlSessionTemplate 带参数的构筑器进行实例化。请问有什么好的实现方式吗?

代码如下:

@Repository(value = "BaseMyBatisDAOImpl")
public class BaseMyBatisDAOImpl extends SqlSessionDaoSupport{    
      public static final Logger log = LoggerFactory.getLogger(BaseMyBatisDAOImpl.class);
            
       protected SqlSession sqlSession;      
                             
       @Autowired
       public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate){
              super.setSqlSessionTemplate(sqlSessionTemplate);
       }                
  }            

还是我们一定只能增加SetXXX方法,根据场景判断通过Set方式实现SqlSessionTemplate 的注入。

阅读 5.8k
2 个回答

在使用的时候,根据场景,需要使用 SqlSessionTemplate 默认构造器进行实例化,有时候需要SqlSessionTemplate 带参数的构筑器进行实例化。

你的需求应该是在实例化 SqlSessionTemplate Bean 之前, 可以根据不同的需求来使用相应的构造器吧?
那么可以使用Spring Java Config 的方式来配置 Bean, 例如:

@Configuration
public class AppConfig {
    @Bean
    public SqlSessionTemplate sqlSessionTemplate() {
        if (someCondition) {
            return new SqlSessionTemplate();
        } else {
            return new SqlSessionTemplate(args);
        }
    }
}

使用 Spring Java Config , 就可以根据条件控制如何生成 Bean 的.

新手上路,请多包涵

我觉得可以写多个继承SqlSessionTemplate的类,然后用@Component("Your_Bean_Name")来指定不同实现的Bean名称,最后在注入的地方用@Qulifiler("The_Bean_Name")来指定要注入的Bean!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题