您的位置:首页 > 编程语言 > Java开发

Spring知识点总结(注解篇)

2018-02-06 22:22 399 查看
Spring部分注解备忘

@Component,该注解使用到某个类时,表明该类会作为组件类,告知Spring为这个类创建一个bean。@Name注解可以作为它的替代方案。

@ComponentScan告诉Spring 某个packag下用注解标识的类,需要被spring自动扫描并且装入bean容器。不配置base package的情况下,以配置类所在的包作为基础包进行扫描组件。当然也可以配置base package,并且是多个package。

@Autowired注解由Spring提供,默认按类型装配,默认情况下要求依赖对象必须存在,如果要允许为null,则需要设置required属性为false。
如果我们想使用名称装配可以结合@Qualifier注解进行使用。可以使用Java提供的@Inject来替代。

@Bean,能够使用@Scope注解来指定该bean的范围。
用例

@Bean

@Scope("prototype")

public TransferService transferService() {

return new TransferServiceImpl();

}


@Configuration用于定义配置类,标注在某个类上,相当于把该类作为spring的xml配置文件中的<beans>,其作用是配置Spring容器(应用上下)。

当然还有AOP的一系列的注解,不在此一一述说。

SpringMVC的常用注解

@PathVariable

URI模板 “favusers/{favUserId}"指定变量的名字 favUserId ,当控制器处理这个请求的时候, favUserId的值会被设定到URI中。比如,当有一个像“favusers/favccxx”这样的请求时,favUserId的值就是 favccxx。

@PathVariable 可以有多个注解,像下面这样:

@RequestMapping(value="/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET)

public String findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {

//ownerId和petId被自动赋值


}


@RequestParam

该注解将请求的参数绑定到方法中的参数上。如果想自定义指定参数的话,如果将@RequestParam的 required 属性设置为false
(如@RequestParam(value="id",required=false))。

@ModelAttribute

该注解可以作用在方法或方法参数上,该注解支持一个属性value,类型为String,表示绑定的属性名称。

当它作用在方法上时,标明该方法的目的是添加一个或多个模型属性(model attributes)。该方法支持与@RequestMapping一样的参数类型,但并不能直接映射成请求。控制器中的@ModelAttribute方法会在@RequestMapping方法调用之前而调用。

@ModelAttribute

public Account addAccount(@RequestParam String number) {

return accountManager.findAccount(number);

}


@ModelAttribute

public void populateModel(@RequestParam String number, Model model) {

model.addAttribute(accountManager.findAccount(number));

// add more ...

}


 @ModelAttribute方法有两种风格:一种是添加隐形属性并返回它。另一种是该方法接受一个模型并添加任意数量的模型属性。用户可以根据自己的需要选择对应的风格。

请举例说明@Qualifier注解?

@Qualifier注解意味着可以在被标注bean的字段上可以自动装配。

下面的示例将会在Customer的person属性中自动装配person的值。

public class Customer

{

@Autowired

private Person person;

}


在配置文件中配置Person类。

<bean id="customer" class="com.howtodoinjava.common.Customer" />


<bean id="personA" class="com.howtodoinjava.common.Person" >

<property name="name" value="lokesh" />

</bean>


<bean id="personB" class="com.howtodoinjava.common.Person" >

<property name="name" value="alex" />

</bean>


但是这样子Spring不知道要给Customer装配那个bean。所以我们需要用到@Qualifier

public class Customer

{

@Autowired

@Qualifier("personA")

private Person person;

}


@Autowired和@Resource的区别是什么? 

相同点:@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。

不同点:
@Autowired注解由Spring提供,默认按类型装配,默认情况下要求依赖对象必须存在,如果要允许为null,则需要设置required属性为false。

如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:

@Autowired()

@Qualifier("baseDao")

private BaseDao baseDao;


@Resource 是JDK1.6支持的注解,默认按照名称进行装配,名称可以通过name属性进行指定。Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。

@Resource装配顺序:
①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。
②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。
③如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。
④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配

示例代码

@Resource(name="baseDao")

private BaseDao baseDao;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: