软件设计之SSM(4)
路线图推荐:
【Java学习路线-极速版】【Java架构师技术图谱】
尚硅谷新版SSM框架全套视频教程,Spring6+SpringBoot3最新SSM企业级开发
资料可以去尚硅谷官网免费领取
学习内容:
基于配置类方式管理Bean
- 完全注解开发
- 第三方jar包类添加进ioc容器
- 如何引用其他的ioc组件
1、完全注解开发
Spring 完全注解配置(Fully Annotation-based Configuration)是指通过 Java配置类
代码来配置 Spring 应用程序,使用注解来替代原本在 XML 配置文件中的配置。相对于 XML 配置,完全注解配置具有更强的类型安全性和更好的可读性。
- 依靠注解,无法摆脱独立于XML配置,还需要第三方类配置、扫描配置、引入外部资源配置
注解介绍
将一个类作为Spring 的配置类
注解 | 描述 | 用法示例 |
---|---|---|
@ComponentScan | 用于自动扫描指定包及其子包中的 Spring 组件(如 @Component、@Service、@Repository、@Controller)。 | @ComponentScan(basePackages = "com.example") |
@PropertySource | 用于加载外部属性文件,以便在 Spring 应用程序中使用这些属性。 | @PropertySource("classpath:application.properties") |
@Configuration | 表示该类可以使用 Spring IoC 容器作为源定义 bean 的来源。 | @Configuration public class AppConfig { ... } |
package com.atguigu.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
/**
* 使用 @Configuration 注解将一个普通的类标记为 Spring 的配置类。
* description:java的配置类,替代xml配置文件
* 1 包扫描注解配置
* 2 引用外部的配置文件
* 3 声明第三方依赖的bean
* 步骤1: 添加@Configuration 代表是配置类
* 步骤2: 实现上面的三个功能注释
*/
@ComponentScan("com.atguigu.ioc_01")
@PropertySource(value = "classpath:jdbc.properties")
@Configuration
public class JavaConfiguration {
}
实际使用
依旧是两步:
- 创建容器,通过AnnotationConfigApplicationContext
- 获取bean,通过getbean
//1 创建容器
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(JavaConfiguration.class);
//2 获取bean
StudentController bean = applicationContext.getBean(StudentController.class);
System.out.println(bean);
2、第三方jar包类添加进ioc容器
场景设计:将Druid连接池对象
存储到IoC容器
@ComponentScan("com.atguigu.ioc_01")
@PropertySource(value = "classpath:jdbc.properties")
@Configuration
public class JavaConfiguration {
@Value("${jdbc.user}")
String username;
@Value("${jdbc.password}")
String password;
@Value("${jdbc.url}")
String url;
@Value("${jdbc.driver}")
String driverClassName;
/*
<bean ->一个方法
方法的返回值类型 == bean组件的类型或者它的接口和父类
方法的名字 = bean id
方法体自定义实现过程
方法上添加@Bean :会让通过配置类的方法创建的组件存储到ioc容器中
* */
@Bean
public DruidDataSource dataSource(){
//使用Java代码实例化
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setUrl(url);
dataSource.setDriverClassName(driverClassName);
//返回结果即可
return dataSource;
}
}
Bean name设置
在Spring框架中,@Bean注解用于定义一个Bean,默认情况下,Bean的名字是方法的名字
如果你想显式指定Bean的名字
,可以在@Bean注解中传入一个自定义的名字:
- 在@Bean注解中,name属性和value属性其实是等价的,二者都可以用于指定Bean的名字
@Bean(name = "customServiceName")
@Bean(value = "customServiceName")
周期方法如何指定
- 原有注解方案: PostConstruct + Predestory 注解指定
- 在定义Bean时,可以通过@Bean注解的
initMethod
和destroyMethod
属性来指定初始化方法和销毁方法。这些方法应该在对应的Bean类中定义。
3、如何引用其他的ioc组件
- 方案1: 直接
调用方法返回 Bean 实例
:在一个 @Bean 方法中直接调用其他 @Bean 方法来获取 Bean 实例,虽然是方法调用,也是通过IoC容器获取对应的Bean - 方案2:
参数引用法:
通过方法参数传递 Bean 实例的引用来解决 Bean 实例之间的依赖关系 -
- 当引用的参数组件有多个,比如组件A有id为
AA
和id为aa
的两个组件,在A组件作为参数时,需要指定其中一个id作为形参名称
- 当引用的参数组件有多个,比如组件A有id为