java中常见注解

来源:互联网 发布:网络暴力案例分析 编辑:程序博客网 时间:2024/06/06 08:50

前言:

Spring的核心是一个Ioc容器,这个容器负责bean的注册和管理。注册方式:

1.  注解方式进行注入

2.  Xml的bean配置

标记类:

关键词:

@Controller:标注控制层组件,进行bean注入

@Service:标注业务层组件,进行bean注入

@Repository:标注数据访问层组件,进行bean注入

@Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。

这种bean注入方式,生成的bean的id名为类名的首字母小写。

配置:

添加以上四种注解的类需要通过spring的xml配置,进行注册;

通过包路径的扫描,带有bean注解关键字,进行注册(<context:component-scanbase-package=  />);

<context:component-scanbase-package="com.baobaotao">

    <context:include-filtertype="regex"

       expression="com\.baobaotao\.service\..*"/>

    <context:exclude-filtertype="aspectj"

       expression="com.baobaotao.util..*"/>

</context:component-scan>

扩展:

值得注意的是 <context:component-scan/> 配置项不但启用了对类包进行扫描以实施注释驱动 Bean 定义的功能,同时还启用了注释驱动自动注入的功能(即还隐式地在内部注册了AutowiredAnnotationBeanPostProcessor 和 CommonAnnotationBeanPostProcessor),因此当使用 <context:component-scan/> 后,就可以将 <context:annotation-config/> 移除了。<context:annotation-config/> 这个注册了两个处理器,在@Resource需要依赖

CommonAnnotationBeanPostProcessor这个处理器。

标记属性和方法:

@Autowired

说明:

通过类型去查找bean注入。可以标注在属性上,setter方法上,构造函数上。这时,@Autowired 将查找被标注的方法的入参类型的 Bean,并调用方法自动注入这些 Bean。类似使用xml的bean注入方式。

注意:

默认@Autowired进行注入时,需要在spring容器中存在这个bean,有且只有一个,如果找不到匹配的bean,spring容器会抛出BeanCreationException异常。当不确定是否存在,需要使用@Autowired(required = false),这等于告诉 Spring:在找不到匹配 Bean 时也不报错。

如果 Spring 容器中拥有多个候选 Bean,Spring 容器在启动时也会抛出 BeanCreationException 异常。此时可以使用@Autowired@Qualifier("personDaoBean")来匹配bean的名称进行注入,这种方式是让注入通过名称来进行匹配,这种注入再找不到匹配的bean名称时,不会再按照类型进行bean的匹配。

@Resource

说明:

允许通过name和type进行bean注入,一旦指定类型,只按照其中一种,未指定则先通过name查找bean,没有找到则再通过type查找。

@Resource(name="dataSource")
@Resource(type=DataSource.class)

注意:

需要在配置文件中新增处理器CommonAnnotationBeanPostProcessor

@RequestMaping

说明:

可以作用于方法或类上。(用于控制层)

@RequestMapping("/softpg/downSoftPg.do")
@RequestMapping(value="/softpg/ajaxLoadSoftId.do",method =POST)
@RequestMapping(value = "/osu/product/detail.do", params = {"modify=false" }, method=POST)

方法的参数允许基本类型和对象,且可以同时存在。

注意:

方法中的参数如果是基本类型,必须一一匹配且存在,否则请求时会返回400的错误。如果方法的参数是类,则客户端可以使用同样的传参方式进行参数的赋值,且允许基本类型和实体类参数并行使用,且允许某个类中的属性值不传值。

@PathVariable

说明:

可以通过@PathVariable获取uri部分中表明的参数。用于需要将uri中的部分值作为入参进行处理。通过value指定在uri中的变量名,不配则按照名字进行匹配。

例子:

注意:

这个注解可以用于类中,也可以位于方法中的requestMapping中。

@RequestParam

说明:

指的是url中的参数部分,不配置则按照参数名进行对应,且要求参数完整。进行配置后可以修改参数的参数名,参数是否必须

例子:

@RequestParam(required=false):参数不是必须的,默认为true
@RequestParam(value="id",required=false)

@RequestParam(“id”)

@RequestHeader

通过该注解获取http请求头的值

@CookieValue

可以把Requestheader中关于cookie的值绑定到方法的参数上。

 

0 0
原创粉丝点击