文档章节

Spring annotation 、Spring @Required 注解解析

fengzhi714
 fengzhi714
发布于 2016/09/27 10:20
字数 468
阅读 52
收藏 0

官方文档地址:

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-annotation-config

注解:提供大量的上下文声明, 配置更简短。

XML:擅长连接组件不触碰自己的源代码或重新编译它们。

@Required

注解适用于 bean 属性的 setter 方法,并且它指示受影响的 bean 属性必须在XML配置文件中配置时被填充,否则容器将抛出 BeanInitializationException 异常。

例如:

创建实体类:RequiredDome ,添加 id、name两个属性并添加 @Required 注解。

package com.fengzhi.spring;

import org.springframework.beans.factory.annotation.Required;

public class RequiredDome {

	private int id;

	private String name;

	public int getId() {
		return id;
	}

	@Required
	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	@Required
	public void setName(String name) {
		this.name = name;
	}

}

创建 requireDome.xml,添加 requiredDome 并在使用时设置id的值。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd   ">

	<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor" />

	<bean id="requireDome" class="com.fengzhi.spring.RequiredDome">
		<property name="id" value="1" />

		<!-- <property name="name" value="test" /> -->
	</bean>
</beans>

 创建测试类 TestRequire

package com.fengzhi.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.fengzhi.spring.RequiredDome;
 
public class TestRequire {

	@Test
	public void testRequire() {
		ApplicationContext context = new ClassPathXmlApplicationContext("requireDome.xml");

		RequiredDome rd = (RequiredDome) context.getBean("requireDome");

		System.out.println("Id: " + rd.getId());
		System.out.println("Name : " + rd.getName());
	}

}

创建完成后,执行测试类。程序将抛出异常:BeanInitializationException 

Initialization of bean failed;

nested exception is org.springframework.beans.factory.BeanInitializationException:

Property 'name' is required for bean 'requireDome'

修改 requireDome .xml

<?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
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.0.xsd  ">

	<context:annotation-config />

	<bean id="requireDome" class="com.fengzhi.spring.RequiredDome">
		<property name="id" value="1" />

		<property name="name" value="test" />
	</bean>
</beans>

程序即可正常运行。

配置文件中两种不同的配置:

  1. RequiredAnnotationBeanPostProcessor  @Required 注解的处理器,即 bean 后置处理器,检查所有带@Required 的 bean 属性是否设置值,如果未设置值则抛出异常。
  2. 在spring配置文件中可以通过 <context:annotation-config /> 自动注册RequiredAnnotationBeanPostProcessor 处理器。

© 著作权归作者所有

fengzhi714
粉丝 6
博文 52
码字总数 16837
作品 0
佛山
后端工程师
私信 提问
Spring基于注解的配置概述

以下内容引用自http://wiki.jikexueyuan.com/project/spring/annotation-based-configuration.html: 从Spring 2.5开始就可以使用注解来配置依赖注入。而不是采用XML来描述一个bean的连线,你...

easonjim
2017/05/23
0
0
SpringMVC+Spring事物失效问题

1、spring扫描配置 springmvc扫描配置导致事物失效 一个项目中既有SpringMVC又有Spring 的时候,会发生事物失效问题 原因:使用的spring注解+springMVC注解,默认情况下spring应该先加载appli...

宿小帅
2016/10/12
50
0
详解Java的Spring框架中的注解的用法

使用Spring注解来注入属性 1.1. 使用注解以前我们是怎样注入属性的 类的实现: 配置文件: 1.2. 引入@Autowired注解(不推荐使用,建议使用@Resource) 类的实现(对成员变量进行标注) 或者...

Airship
2018/04/22
0
0
Spring 注解注入详解

1.@Autowired注解(不推荐使用,建议使用@Resource) @Autowired可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作。@Autowired的标注位置不同,它们都会在Spring在初始化这个b...

wpb王鹏博
2015/06/08
0
0
Spring配置项解释说明

在基于主机方式配置Spring的配置文件中,你可能会见到context:annotation-config/这样一条配置,他的作用是式地向 Spring 容器注册 AutowiredAnnotationBeanPostProcessor、CommonAnnotatio...

五大三粗
2015/11/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

微信小程序和百度小程序开发的一些不同点

1: initActive从onload放到onready中 2: bindtap='{{childTickeData.freeadd?"childticket":""}}',语法错误。会导致页面加载不出来,而且也不报任何错。 3:使用搬家工具,支付api名称转换......

醉雨
4分钟前
0
0
最近执行过的SQL语句查询

SELECT TOP 1000 ST.text AS '执行的SQL语句' , QS.execution_count AS '执行次数' , QS.total_elapsed_time / 10000 AS '耗时' , QS.total_logical_reads AS '逻辑读取次数' , QS.total_lo......

神手--追魂
5分钟前
0
0
从濒临解散到浴火重生,OceanBase 这十年经历了什么?

阿里妹导读:谈及国产自研数据库,就不得不提 OceanBase。与很多人想象不同的是,OceanBase 并非衔着金钥匙出生的宠儿。相反,它曾无人看好、困难重重,整个团队甚至数度濒临解散。 从危在旦...

阿里云官方博客
9分钟前
0
0
阿里开发者招聘节 | 面试题02-04:给定一个二叉搜索树(BST),找到树中第K小的节点

为帮助开发者们提升面试技能、有机会入职阿里,云栖社区特别制作了这个专辑——阿里巴巴资深技术专家们结合多年的工作、面试经验总结提炼而成的面试真题这一次将陆续放出(面试题官方参考答案...

阿里云云栖社区
25分钟前
1
0
使用Redis SETNX 命令实现分布式锁

基于setnx和getset http://blog.csdn.net/lihao21/article/details/49104695 使用Redis的 SETNX 命令可以实现分布式锁,下文介绍其实现方法。 SETNX命令简介 命令格式 SETNX key value 将 ke...

彬彬公子
26分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部