1. 注解仅仅是标记
Spring框架的注解用途广泛,极大地简化了Java企业级应用的开发。注解通过提供元数据来替代传统的XML配置方式,让开发者能够通过简单的声明方式控制各种Spring框架的特性,从而实现依赖注入、面向切面编程等功能。
2. spring中提供的四个注解:
@Component @Controller , @Service , @Repository
-
@Component : 一个类被@Component修饰,表示这个类的实例将会被纳入IOC容器管理
-
<context:component-scan base-package="" /> 组件扫描
- @Controller , @Service , @Repository 这三个都是 @Component的别名 分别应用在不同的"场合",场合指的是不同的层(控制层、业务逻辑层、数据访问层) 所以,
@Controller表示控制层组件;
@Service表示业务逻辑层组件;
@Repository表示数据访问层组件
3. 组件扫描的细节语法
- exclude-filter :表示排除掉Controller组件
- include-filter :表示扫描Controller组件 , 需要注意:禁用默认的过滤规则 use-default-filter="false"
4. 使用注解时,beanName的问题
-
默认情况下,beanName就是类名首字母小写
-
我们也可以指定beanName
xml
复制代码
<bean id="ds" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.pwd}"/> </bean>
5. @Autowire - 自动装配
- 语法 :定义一个全局变量,在该变量上方注入
- 自动装配的流程和原理
- ① 首先根据类型查找并装配。如果找到并且唯一,则装配成功
- ② 否则,继续根据名称查找,如果找到,则装配成功。
- ③ 如果想根据自己指定的名称去装配,则使用@Qualifier
6. @Value - 读取properties文件中的数据给属性赋值
1.新建 book.properties 文件
2.新建 Book 类
java
复制代码
@Component @Data //读取classpath路径下的book.properties @PropertySource(value ="classpath:book.properties",encoding = "UTF-8") public class Book { @Value("${book.bname}") private String bname ; @Value("${book.price:0}") private Integer price ; @Value("${book.author}") private String author ; }
7. @Configuration 配置类
标注一个类为配置类
8. AnnotationConfigApplicationContext
用来加载配置类,形成IOC容器
java
复制代码
beanFactory = new AnnotationConfigApplicationContext(MyConfiguration.class);
9. @Bean用来定义一个方法的返回值纳入IOC容器管理
java
复制代码
@Bean(name="ds2") // 将下面这个方法的返回值纳入IOC容器管理 public DataSource createDataSource(@Value("${jdbc.driver}") String driverClassName , @Value("${jdbc.url}") String url , @Value("${jdbc.username}") String username , @Value("${jdbc.pwd}") String pwd ){ DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(driverClassName); ds.setUrl(url); ds.setUsername(username); ds.setPassword(pwd); return ds ; }
10.@Bean修饰的方法参数,会自动从IOC容器中寻找并自动装配
xml
复制代码
@Bean(name="tiger001",initMethod = "eat",destroyMethod = "sleep")
11.@Import的作用
@Import
是一个用于将其他配置类导入当前配置类的注解。
12.@Conditional
- @Conditional表示条件化注解
- 条件化注解需要条件对象。我们使用Condition表示条件对象。因此需要一个类实现Condition接口
- Condition接口中有一个match方法,返回boolean。如果true,则表示条件成立。否则,条件不成立,不创建bean实例。
1.创建MyCondition类
java
复制代码
public class MyCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { boolean flag = context.getBeanFactory().containsBeanDefinition("getTiger"); return flag ; } }
2.定义一个方法
java
复制代码
@Bean("m") @Conditional(MyCondition.class) public Monkey createMonkeyInstance(){ return new Monkey(); }
13.spring6和junit5集成
- 添加依赖:spring-test
- 在测试类上添加一个注解:@SpringJunitConfig @SpringJunitConfig(MyConfiguration.class) @SprintJunitConfig()
xml
复制代码
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>6.0.11</version> <scope>test</scope> </dependency>
java
复制代码
//@SpringJUnitConfig(MyConfiguration.class) @SpringJUnitConfig(locations = "classpath:applicationContext.xml") public class IOCTest3 { @Autowired @Qualifier("ds2") private DataSource dataSource ; @Test public void test02() throws SQLException { System.out.println(dataSource.getConnection()); } }