持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情
写在前面😘
大一电子信息工程新生,请多多关照,希望能在掘金记录自己的学习历程!
【Spring 学习笔记】 系列教程基于Spring 5.2.10.RELEASE讲解
一、纯注解开发(Spring 3.x及以上)
在上篇文章Spring 原始注解中使用注解来配置bean,但是依然有用到配置文件(如在配置文件中的注解扫描)。
Spring在3.0版已经支持纯注解开发,即用Java类替代配置文件。下面来介绍下,在Spring 3中都有哪些新的注解代替了xml文件。
1️⃣开启纯注解功能
@Configuration
- 类型:类注解
- 位置:类定义上方。
- 作用:设置当前类为 spring 核心配置类(替代了 spring 核心配置文件)
@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注解用于设定扫描路径,此注解只能添加一次,可以用数组表示扫描包的位置
@ComponentScan({com.bighorn.service","com.bighorn.dao"})
- 加载纯注解格式上下文对象,需要使用
AnnotationConfigApplicationContext
//加载配置类初始化容器
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);
}
运行结果如下👇
成功连接到了数据库👌
写在后面🍻
感谢观看啦✨
有什么不足,欢迎指出哦💖
掘金的运营同学审核辛苦了💗