写在前面😘
大一电子信息工程新生,请多多关照,希望能在 InfoQ 社区记录自己的学习历程!
【Spring 学习笔记】 系列教程基于 Spring 5.2.10.RELEASE
讲解
一、纯注解开发(Spring 3.x 及以上)
在上篇文章Spring 原始注解中使用注解来配置 bean,但是依然有用到配置文件(如在配置文件中的注解扫描)。
Spring 在 3.0 版已经支持纯注解开发,即用 Java 类替代配置文件。下面来介绍下,在 Spring 3 中都有哪些新的注解代替了 xml 文件。
1️⃣开启纯注解功能
@Configuration
@ComponentScan
案例👇
步骤 1:创建配置类
创建一个配置类SpringConfig
public class SpringConfig {
}
复制代码
步骤 2:标识该类为配置类
在配置类上添加@Configuration
注解,将其标识为一个配置类,替换applicationContext.xml
@Configuration
public class SpringConfig {
}
复制代码
步骤 3:用注解替换包扫描配置
在配置类上添加包扫描注解@ComponentScan
替换<context:component-scan base-package="com.bighorn"/>
@Configuration
@ComponentScan("com.bighorn")
public class SpringConfig {
}
复制代码
步骤 4:创建运行类并执行
public static void main(String[] args) {
//获取配置类初始化容器
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
//从容器中获取对象
User user = context.getBean(User.class);
//打印bean
System.out.println(user);;
}
复制代码
运行结果如下,发现不需要编写 xml 文件,依旧能够获取 bean。
注意点
@ComponentScan({com.bighorn.service","com.bighorn.dao"})
复制代码
//加载配置类初始化容器
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
//加载配置文件初始化容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
复制代码
2️⃣加载 properties 文件
@PropertySource
类型:类注解
位置:类定义上方。
作用:加载 properties 文件中的属性值。
说明:不支持 通配格式*,一旦加载,所有 spring 控制的 bean 中均可使用对应属性值
相关属性
value(默认):设置加载的 properties 文件对应的文件名或文件名组成的数组
示例👇
/*加载jdbc.properties文件*/
@PropertySource(value="classpath:jdbc.properties")
public class DataSourceConfig {
@Value("${jdbc.driver}")
private String drive;
......
}
复制代码
3️⃣加载第三方 Bean
自己定义的 bean(如 User、UserDaoImpl),都是在自己开发的类上面写个注解就完成了(如@Controller
、@Service
、@Repository
)。
但是有些第三方的类在 jar 包里,我们又不能在它们的源代码上面添加注解,所以这时候就要用到@Bean
管理第三方 bean 了!
@Bean
类型:方法注解
位置:方法定义上方。
作用:设置该方法的返回值
作为 spring 管理的 bean 。
注意:
该注解用于替代 XML 配置中的静态工厂与实例工厂创建 bean,不区分方法是否为静态或非静态。
相关属性
value(默认):定义 bean 的访问 id 。
示例👇
/*加载第三方bean:DruidDataSource*/
@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
return ds;
}
复制代码
4️⃣加载第三方配置类
@Import
类型:类注解
位置:类定义上方。
作用:导入第三方配置类作为 spring 控制的资源。
说明:
@Import 仅允许添加一次
,可以使用数组的形式引入多个配置类
@Bean 所在的类可以使用导入的形式进入 spring 容器,无需声明为 bean 。
案例👇
/*在Spring配置类中引入Jdbc的配置类*/
@Configuration
@Import({JdbcConfig.class})
public class SpringConfig {
}
复制代码
二、综合案例:注解配置数据源
之前在spring学习笔记(七)讲过用 xml 形式管理第三方 bean:Druid 数据源。
现在冷饭新炒,用注解的形式试试看,加深一下对@PropertySource、@Bean、@Import
的使用。
步骤 1:导入 druid 等依赖
在 pom.xml 文件里添加spring
、druid
、mysql驱动
的依赖包
<dependencies>
<dependency>
<!--springframework框架-->
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<!--Druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
<!--mysql 驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
<scope>runtime</scope>
</dependency>
</dependencies>
复制代码
步骤 2:准备 properties 配置文件
resources 下创建一个 jdbc.properties 文件,并添加对应的属性键值对
# 注册驱动,可以缺省,会根据url自动识别
jdbc.drive=com.mysql.cj.jdbc.Driver
# 数据库连接地址
jdbc.url=jdbc:mysql://127.0.0.1:3306/db
# 数据库管理员名称
jdbc.username=root
# 数据库密码
jdbc.password=123456
复制代码
步骤 3:创建 DataSource 配置类
在 config 包下创建 DataSourceConfig 数据源配置类,使用注解@PropertySource("classpath:jdbc.properties")
加载 jdbc 配置文件,使用注解@Bean("druidDataSource")
将第三方 bean——DruidDataSource 放置到 spring 容器中
/*数据源配置类*/
// 加载jdbc.properties配置文件
@PropertySource("classpath:jdbc.properties")
public class DataSourceConfig {
//用SpEl表达式将属性注入
@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("druidDataSource")
public DruidDataSource getDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
复制代码
步骤 4:创建 spring 核心配置类
使用注解@Import({DataSourceConfig.class})
,加载第三方配置类——DataSourceConfig
/*Spring核心配置类*/
@Configuration
//引入DataSourceConfig数据源配置类
@Import({DataSourceConfig.class})
public class SpringConfig {
}
复制代码
步骤 5:编写运行程序
public static void main(String[] args) throws SQLException {
//获取配置类初始化容器
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
//从容器中获取DruidDataSource对象
DruidDataSource druidDataSource = context.getBean("druidDataSource", DruidDataSource.class);
//获取数据库链接
DruidPooledConnection connection = druidDataSource.getConnection();
//打印数据源信息
System.out.println(connection);
}
复制代码
运行结果如下👇
成功连接到了数据库👌
写在后面🍻
感谢观看啦✨
有什么不足,欢迎指出哦💖
评论