記事ディレクトリ
1. 依存関係の注入_Autowired
1. 構成クラスでの @Bean メソッドのインジェクション
1.1) インジェクションインスタンス
構成クラス:
public class Config {
@Bean
public Saw saw(){
return new Saw();
}
@Bean
public Worker worker(Saw saw){
Worker worker=new Worker();
worker.saw = saw;
return worker;
}
}
1.2) 自動注入のマッチング原理
2. コンポーネントスキャンにより自動インジェクションを実現 @Autowired
構成クラス:
@Configuration
@ComponentScan(basePackages = "cn.tedu.demo")
public class Config {
}
鋸コンポーネントクラス:
@Component
public class Saw implements Serializable {
String name="寒冰锯";
@Override
public String toString() {
return name;
}
}
ワーカーコンポーネントクラス:
@Component
public class Worker implements Serializable {
String name="光头强";
@Autowired
public Saw saw;
public void work(){
System.out.println(name+"使用..."+saw+"...砍树");
}
}
3.setメソッドの注入
2. インターフェイスのデカップリング_自動挿入ルール
1) インターフェースのデカップリングを使用する
@Component アノテーションがそのクラスで使用され、ツールはその
構成クラスを指します。
@Configuration
@ComponentScan(basePackages = "cn.tedu.demo")
public class Config {
}
2) @Autowired インジェクションルール
コンポーネントに @Component を追加する場合、
3) @Qualifier アノテーションは、呼び出し側クラスの対応するコンポーネントを指定します。
コンポーネントクラスはすべて @Component です
3. @Bean と @Component_Druid 接続プールを同時に使用する
1. @Bean と @Component を同時に使用する
@Bean コンポーネントが @Component に挿入される、
@Component コンポーネントが @Bean に挿入される、
上記 2 つのケースは問題ありません。
構成構成クラス:
@Configuration
public class SysConfig {
@Bean
public Date myDate(){
return new Date();
}
}
ワーカーコンポーネントクラス:
@Component
public class Worker implements Serializable {
String name="光头强";
@Autowired
@Qualifier("axe")
public Tool tool;
@Autowired
private Date dt;
public void work(){
System.out.println(name+"使用..."+tool+"...砍树");
System.out.println(dt);
}
}
2、ドルイド僧
2.1) Druid データベース接続プール
2.2) 例
POM 構成
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.15</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
Config クラスの構成:
@Configuration
@ComponentScan(basePackages = "cn.tedu.demo")
public class Config {
@Bean(initMethod="init", destroyMethod="close")
public DataSource dataSource(){
DruidDataSource dt =new DruidDataSource();
dt.setDriverClassName("com.mysql.cj.jdbc.Driver");
dt.setUrl("jdbc:mysql://localhost:3306/tedu?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true");
dt.setUsername("root");
dt.setPassword("root");
dt.setMaxActive(10);
dt.setInitialSize(2);
return dt;
}
}
テストクラスコード:
@Test
public void testDruid(){
DataSource ds = ctx.getBean("dataSource", DataSource.class);
try(Connection conn = ds.getConnection()) {
String sql="select * from student";
Statement st= conn.createStatement();
ResultSet rs=st.executeQuery(sql);
while (rs.next()){
System.out.println(rs.getString(2));
}
} catch (Exception e) {
e.printStackTrace();
}
}
4. プロパティ_@値の読み取り
1.プロパティファイルの環境読み取り
構成クラスコード:
@Configuration
@ComponentScan(basePackages = "cn.tedu.demo")
@PropertySource("classpath:jdbc.properties")
public class Config {
@Autowired
Environment env;
@Bean(initMethod = "init", destroyMethod = "close")
public DataSource dataSource(){
DruidDataSource dt =new DruidDataSource();
dt.setDriverClassName(env.getProperty("db.driver"));
dt.setUrl(env.getProperty("db.url"));
dt.setUsername(env.getProperty("db.username"));
dt.setPassword(env.getProperty("db.password"));
dt.setMaxActive(env.getProperty("db.maxActive",Integer.class));
dt.setInitialSize(env.getProperty("db.initSize",Integer.class));
return dt;
}
}
jdbc.properties コード:
db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/tedu?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
db.username=root
db.password=root
db.maxActive=10
db.initialSize=2
2. @Value読み取り設定
2.1 パラメータに@Valueを設定する
構成クラス:
@Configuration
@ComponentScan(basePackages = "cn.tedu.demo")
@PropertySource("classpath:jdbc.properties")
public class Config {
@Autowired
Environment env;
@Bean(initMethod = "init", destroyMethod = "close")
public DataSource dataSource(
@Value("${db.driver}") String driver,
@Value("${db.url}") String url,
@Value("${db.username}") String username,
@Value("${db.password}") String password,
@Value("${db.maxActive}") int maxActive,
@Value("${db.initSize}") int initSize){
DruidDataSource dt =new DruidDataSource();
dt.setDriverClassName(driver);
dt.setUrl(url);
dt.setUsername(username);
dt.setPassword(password);
dt.setMaxActive(maxActive);
dt.setInitialSize(initSize);
return dt;
}
}