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-methoddestroy-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();
	}
}