9. Spring 的 新注解

大概意思是说  原始注解不能完全替代Spring配置文件中的内容,比如以下是不能被替代的:

·非自定义的Bean的配置:<bean>

·加载properties文件的配置:<context:property-placeholder>

·组件扫描的配置:<context:component-scan>

·引入其他文件:<import>

 

所以 Spring新注解就来了:

注解

说明

   @Configuration

用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解

   @ComponentScan

用于指定 Spring 在初始化容器时要扫描的包。

作用和在 Spring 的 xml 配置文件中的

<context:component-scan base-package="com.itheima"/>一样

   @Bean

使用在方法上,标注将该方法的返回值存储到 Spring 容器中

   @PropertySource

用于加载.properties 文件中的配置

   @Import

用于导入其他配置类

 

解析总体用法:

首先要有一个Spring的配置类 然后在类中写入@Configuration 代表这是一个主配置类,

然后用@ComponentScan注解 配置 扫描目录【扫描Spring注解】

然后用 @Bean 注解 可以将返回值存在注解指定的Bean上

然后用@PropertySource 可以在Spring配置中 载入 properties文件

然后用@Import 导入其他配置 到 主要配置类中。

 

例如下面有一个数据库获取连接【Connction】 的实例:

s1.properties :

jdbc.Driver="com.mysql.jdbc.Driver"
jdbc.url="mysql://localhost:3306/jdbc"                          此代码是错误代码!!别拷贝!! 仅此示范 下次不犯!!! 
jdbc.username="root"
jdbc.password="root"

正是因为上满的 properties 文件写错了 所以!我! 找了一个小时的Bug!!! 我是**!!!! 我既然将双引号也带进去!!!!

 

正确的代码:

s1.properties:

jdbc.Driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/jdbc
jdbc.username=root
jdbc.password=root

 

SpringConfiguration.java 【Java配置类】:

package com.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
/*Spring配置类*/

//注解配置类
@Configuration

//注解配置扫描目录
@ComponentScan("com")   //因为只有一个com目录

/*然后我们直接导入其他配置类[配置properties文件] 参数是 类.class 字节码文件  【class参数】
//@Import({aaa.class","bbb.class})    //多个用逗号即可。*/
@Import({DataSourceConfiguration.class})


public class SpringConfiguration {
}

 

DataSourceConfiguration.java :

package com.config;
//DataSouce c3p0的 配置类

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;


import javax.sql.DataSource;    //DataSouce类是最原生的那个连接池 之间有很多关系 所以可以直接接到c3p0的ComboPooledDataSource类!!!
import java.beans.PropertyVetoException;

//先用注解导入properties文件 参数是文件名
@PropertySource("classpath:s1.properties")
public class DataSourceConfiguration {
    //一系列通过读入properties文件的数据进行注入

    @Value("${jdbc.Driver}")
    private String Driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    //这个注解使用在方法上,标注将该方法的返回值存储到 Spring 容器中
    @Bean(name = "DataSource")
    public DataSource GetDataSource() throws PropertyVetoException {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(Driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(username);
        dataSource.setPassword(password);
        return dataSource;
    }

}

 

Test.java 【测试类】

import com.config.SpringConfiguration;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class Demo {
    @Test
    public void test() throws SQLException {
        //因为用的是 Spring的配置类配置 所以呢 这里我们需要用 Annotation这个来直接加载配置类
        ApplicationContext app = new AnnotationConfigApplicationContext(SpringConfiguration.class);
        //因为我们在DataSource配置类中将DataSource放入Spring中了 相当于一个id吧
        DataSource dataSource = (DataSource) app.getBean("DataSource");
        Connection conn = dataSource.getConnection();
        System.out.println(conn);   //如果打印出来没错 证明就用新注解配置完毕了!
    }
}

 

所以呢 他这里没用到 手动配置XML

posted @ 2021-06-24 22:09  咸瑜  阅读(217)  评论(0编辑  收藏  举报