Discuss / Java / 我想到了一个最笨的办法

我想到了一个最笨的办法

Topic source

就是自己创建一个CustomDataSource类继承HikariDataSource,然后再标注上@Component

如果第三方对象需要注入其他对象,那就覆写该父类方法,再标注上@Atuowired,比如:

@Component
public class CustomDataSource extends HikariDataSource {

	@Autowired
	public CustomDataSource(HikariConfig configuration) {
		super(configuration);
	}
}

但是后面我遇到了个问题,当需要注入基本数据类型和String这样的不可能去继承的final类时,还有需要的部件是final类时,该怎么做呢?

	@Override
	@Autowired
	public void setPassword(String password) {
		super.setPassword(password);
	}

	@Override
	@Autowired
	public void setJdbcUrl(String jdbcUrl) {
		super.setJdbcUrl(jdbcUrl);
	}

	@Override
	@Autowired
	public void setPoolName(String poolName) {
		super.setPoolName(poolName);
	} //如何注入这些属性?

运行了代码才发现我还忘了一件事,如果我要@Autowired注入任何属性,我都得持有一个能够对应的@Component标注的Bean类,所以哪怕是构造方法中的HikariConfig,如果这样做的话也需要自行创建类去继承,显然很繁琐。

老师让我们思考的是不是,存在一种多种装配方式混用的模式,就像前面学的Servlet和JSP混用那样,达成我们的目的?

  • 如何注入第三方类?

这个问题在下一节找到了解决办法,使用@Bean的方法创建

  • 如何注入基本数据类型

这个问题在下一节的下一节找到了解决办法,使用@Value()注入

但是我感觉老师应该把@Value()注入方式写在这一节才好?

代码格式不混乱是怎么做到的。。

```

@Bean
public HikariDataSource hikariDataSource(){
    HikariConfig hikariConfig = new HikariConfig();    
    HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig);    
    return hikariDataSource;
}

```


  • 1

Reply