写在前面😘
大一电子信息工程新生,请多多关照,希望能在 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
@Configurationpublic 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*/@Beanpublic 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);}
复制代码
运行结果如下👇
成功连接到了数据库👌
写在后面🍻
感谢观看啦✨
有什么不足,欢迎指出哦💖
评论