Spring框架中的常用注解
Spring框架,在使用注解配置时,会比xml配置更方便,但没有xml配置清晰。所以,如果不了解Spring框架,可以先看我的另一篇文章,其中讲解了基于xml配置的常用标签及使用方法:spring框架beans.xml中的标签
Spring基于注解开发的注解我分为5种:
文章目录
- Spring框架中的常用注解
- 一、用于创建对象的标签
- 二、用于注入数据的
- 三、用于改变作用范围的
- 四、与生命周期相关的(了解)
- 五、用于无beans.xml文件配置的注解(了解)
一、用于创建对象的标签
他们的作用就和在beans.xml文件中的<bean>
标签的功能是一样的。
bean.xml的写法(对应xml看下面的注解):
<bean id="userService" class="com.itjj.service.UserService"></bean>
1.@Component
位置:
用注解在类上。
作用:
用于把当前类对象存入Spring容器。
属性:
value
:用于指定当前bean的id。不写时,默认为当前的类名把首字母改小写。
2.@Controller
:与@component
注解用法与作用一样,只不过常用于表现层。
3.@Service
:与@component
注解用法与作用一样,只不过常用于业务逻辑层。
4.@Repository
:与@component
注解用法与作用一样,只不过常用于持久层。
示例:
//上述4个注解都可以写在这个位置,这里用Component举例。
//注解的属性只有一个,且为value时可以简写。(正常写法是@Component(value="userService"))
@Component("userService")
public class UserServiceImpl{
//此处省略类中成员变量及成员方法
}
二、用于注入数据的
他们的作用就和在beans.xml文件中的<bean>
标签的子标签<property>
标签的功能是一样的。
bean.xml的写法(对应xml看下面的注解):
<!-- userService 通过构造器注入属性-->
<bean id="userService" class="com.itjj.service.UserService">
<property name="id" value="11"></property>
<property name="name" value="小张"></property>
<property name="userDao" ref="userDao"></property>
</bean>
<!-- 被userService注入的bean -->
<bean id="userDao" class="com.itjj.service.UserDao"></bean>
1.@Value
:
位置:
变量上。
作用:
注入基本数据类型和String类型数据。
属性:
value
:用于指定数据的值。它可以使用Spring中的SpEL(也就时Spring中的EL表达式,写法为${表达式}
)。
2.@Autowired
:
位置:
可以是变量上(推荐,此时可以省略set方法),也可以是set方法上。
作用:
自动按照类型注入。只要IOC容器中有唯一一个bean对象类型和要注入的类型匹配(包括子类),就可以成功注入。
如果IOC容器中没有任何bean对象类型和要注入的类型一样,则报错。
如果IOC容器中有多个bean对象类型和要注入的类型一样时:如果有id一样的就按照bean的注入;如果没有,则报错。
属性:
value
:用于指定要注入的bean的id
。
3.@Qualifier
:
作用:
在使用@Autowired
注解标记变量的前提下(在方法上注解时,不需要@Autowired
注解),再按照id注入。
位置:
可以是变量上(需与@Autowired
注解一起使用),可以是set方法上(可以单独使用)。
属性:
value
:用于指定注入bean的id
。
4.@Resource
:
作用:
直接按照bean的id进行注入。可以单独使用。(相当于@AutoWired
与@Qualifier
结合使用)
位置:
可以是变量上,可以是set方法上。
属性:
name
:用于指定注入bean的id
。
—上述1只能注入基本和String类型,2、3、4注解只能用来注入bean类型的数据。集合类型只能用xml进行注入—
示例:
@Service
public class UserService{
@Value("18")
private int age;
@Value("小张")
private String name;
@AutoWired
@Qualifier("userDao")
//@Resource(name="userDao"),相当于上面的两个注解
private UserDao userDao;
}
三、用于改变作用范围的
作用与beans.xml中<bean>
标签的scope属性一样。
bean.xml的写法(对应xml看下面的注解):
<bean id="userService" class="com.itjj.service.UserServiceImpl" scope="singleton">
1.@Scope
:
作用:
用于指定bean的作用范围。
属性:
value
:用于指定作用范围的取值。(singleton,property等,默认是singleton)
示例:
@Service
public class UserService{
@Scope("singleton")
@AutoWired
private UserDao userDao;
}
四、与生命周期相关的(了解)
他们的作用与bean.xml配置文件中bean标签的init-method
与destroy-method
一样
bean.xml的写法(对应xml看下面的注解):
<bean id="userService" class="com.itjj.service.UserServiceImpl" init-method="init" destroy-method="destroy">
1.@PostConstruct
位置:
标记在初始化的方法上。
作用:
用于指定该对象的初始化方法。
2.@PreDestroy
位置:
标记在销毁的方法上。
作用:
用于指定该对象的销毁方法。
示例:
@Service
public class UserService{
@PostConstruct
public void init(){
//省略初始化方法细节
}
@PreDestroy
public void init(){
//省略初始化方法细节
}
}
五、用于无beans.xml文件配置的注解(了解)
1.@Configuration
位置:
作用在类上。
作用:
指定当前类为配置类。(代替beans.xml)
2.@ComponentScan
位置:
作用在类上。
作用:
指定创建容器时要扫描注解。
属性:
basePackages
/value
:指定创建容器时要扫描注解的包的数组。
3.@Bean
位置:
作用在配置类中的方法上。
作用:
用于把当前方法的返回值作为bean对象,存入IOC容器。
属性:
name
:当前bean的id值。不写时,默认时当前方法名。
注意:
当前方法有参数时,会在容器中查找有没有相同类型的bean对象(与@Autowried查找方法一样)
4.@Import
位置:
作用在配置类上。
作用:
指定引入其他配置类。
属性:
value
:用于指定其他配置类的字节码。
注意:
有@Import
注解的类为父配置类,value
值引入的配置类为子配置类。
5.@PropertySource
位置:
作用在配置类上。
作用:
指定.properties配置文件的位置。
属性:
value
:用于指定配置文件的名称和路径。(关键字:classpath:
表示类路径下)
示例:
@Configuration
@ComponentScan("com.itjj")
@Import(JdbcConfiguration.class)
@PropertySource("classpath:jdbcConfig.properties")
public class SpringConfiguration{
@Bean(name="userService")
public UserService createUserService(UserDao userDao){
return new UserService(userDao);
}
@Bean(name="userDao")
public UserDao createUserDao(){
return new UserDao();
}
}