春のエキスパートコース Day02_Spring-DI

記事ディレクトリ

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;
    }
}

要約:

1. @Bean は仕事上面倒なので、@Component の使用量が増える

2. String sql1="select 'Hello Druid'"; データベース接続をテストできます。

3. DruidとHikariCPの比較

3.1 パフォーマンス: 細部の最適化が強化されているため、HikariCP はパフォーマンスの点で Druid よりも優れています。

3.2 機能の豊富さの点: Druid は、接続プールの基本機能に加え、SQL レベルの監視、拡張のサポート、SQL インジェクションの防止など、より包括的な機能を備えています。

3.3 使用の人気: Druid は中国で広く使用されており、国内で多くの生産慣行が存在します。HikariCP は Spring Boot 2.0 以降のデフォルトの接続プールであり、海外で広く使用されています。

おすすめ

転載: blog.csdn.net/u010655348/article/details/131425621