【学习笔记】Spring注解开发
使用注解开发首先要导入context约束,然后开启注解支持
<?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">
</beans>
<context:annotation-config/>
之前在配置文件中做的事情都可以使用注解来做,比如:bean的注册、属性的注入、规定作用域等等
-
bean的注册
使用的注解是 @Component 把该注解加在某个类上,就等价于把这个类注册到spring容器中
@Component public class User { private String name; }
需要注意的是要在配置文件中,扫描某个包下的所有类的注解,这样注解才会生效
<context:component-scan base-package="com.wang.pojo"/>
由@Component衍生出几个注解,如下:
-
dao层 ---- @Repository
-
-
controller层 ---- @Controller
这几个注解是在MVC三层架构下使用的,每一个适用于该层架构,它们和@Component功能相同
-
-
属性的注入
在上一篇文章中,我们探究了关于类作为属性如何注入以及使用注解@Autowired注入
下面是普通属性,利用注解注入
使用的注解是 @Value,可以放在属性上也可以放在set方法上
@Value("张三") private String name;
这句话等价于,在配置文件中的
<property name="name" value="张三"/>
-
规定作用域
在之前的文章中讲到,目前涉及到到作用域有 singleton 和 prototype
利用注解 @Scope 可以规定这个bean的作用域
@Scope("singleton") public class User { @Value("张三") private String name; }
Java的方式配置Spring
使用Java的方式配置Spring,可以完全放弃使用xml配置文件,通过java类和注解的结合,可以实现xml的配置功能
首先写一个实体类
package com.wang.pojo;
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
这个时候,我们没有xml配置文件,所以给它加上注解也没有什么用
要想让他的注解有作用,就要写一个Java配置类,给这个类加上一个注解 @Configuration
@Configuration
public class AppConfig {
}
点进这个注解,发现这个注解也是@Component
给AppConfig类加上@Configuration注解后,如果想要把实体类User注册到容器中还需要写一个方法,并且把这个方法用 @Bean 注解,如下
@Bean
public User getUser(){
return new User();
}
这个类相当于在xml中注册一个bean
<bean id="getUser" class="com.wang.pojo.User"/>
bean 的id 相当于 方法的方法名
bean 的class 相当于 方法的返回值类型
这时这个实体类被注册到spring容器中了
然后在测试类中,使用AnnotationConfigApplicationContext 获得上下文
public void test01(){
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
User getUser = (User) context.getBean("getUser");
System.out.println(getUser.getName());
}
AnnotationConfigApplicationContext() 需要传一个java类