7、使用注解开发
使用注解的前提
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
</beans>
引入约束
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd"
导入AOP包
![](https://i-blog.csdnimg.cn/blog_migrate/cb40b9f5390ae62c8e8bf4230b0f0641.png)
导入支持
<context:annotation-config/>
指定要扫描的包,这个包下的注解会生效
<context:component-scan base-package="com.Lee.pojo"/>
1、bean
@component:相当于<bean id="user" class="com.Lee.pojo.User"/>
组件,放在类上,表示这个类被Spring管理了,其实就是bean
2、值注入
@Value:相当于<property name="name" value="Lee"/>
简单类型值注入,放在需要注入的属性或属性的setter方法上
3、衍生注解
@Component的衍生注解
Dao:@Repository
Service:@Service
Controller:@Controller
四个注解作用相同,将类注入到Spring容器中,相当于bean
4、作用域
@Scope("singleton")
8、使用javaConfig实现配置
步骤:
需要注入的pojo对象
public class User {
private String name;
public String getName() {
return name;
}
@Value("Lee")
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
'}';
}
}
配置类——注册bean
@Configuration
@ComponentScan("com.Lee.pojo")
public class javaConfig {
@Bean
public User getUser(){
return new User();//返回要注入到bean的对象
}
}
@Configuration:代表这是个配置类,等价于之前写的applicationContext.xml
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component//注意!
public @interface Configuration {
@AliasFor(
annotation = Component.class
)
String value() default "";
boolean proxyBeanMethods() default true;
}
其继承@Component,表明这个类,也会将被注解的类注册到Spring容器中
ComponentScan("com.Lee.pojo"):指定这个配置类要扫描的包,等价于<context:component-scan base-package="com.Lee.pojo"/>
@Bean:表明这个方法是一个bean,使用在方法上
方法名就是bean的id
返回值相当于bean中要设置的class属性
就是xml文件中类注册bean的操作,等价于<bean id="bean名字" class="全类名"/>
测试类
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(javaConfig.class);
User user = (User) context.getBean("getUser");
System.out.println(user.getName());
}
ApplicationContext context = new AnnotationConfigApplicationContext(javaConfig.class);
加载配置文件,实例化bean
相当于ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
注意:ClassPathXmlApplicationContext()方法中的参数是字符串,是需要加引号的
而AnnotationConfigApplicationContext()方法中的参数是class文件,是不能加引号的
多个配置类
新建一个config2的配置类,内部配置和javaConfig一样
![](https://i-blog.csdnimg.cn/blog_migrate/88b2f52bf97e682c8be2d61adca9e415.png)
在javaConfig中使用@Import()注解将config2引入到javaConfig中
@Configuration
@ComponentScan("com.Lee.pojo")
@Import(config2.class)
public class javaConfig {
@Bean
public User getUser(){
return new User();
}
}
@Import(config2.class):参数是需要引入的配置类的class文件
小结
Spring的三个核心:
所有的类都需要装配到bean中
所有的bean都需要Spring容器去取