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的范围。
用例
@Configuration用于定义配置类,标注在某个类上,相当于把该类作为spring的xml配置文件中的<beans>,其作用是配置Spring容器(应用上下)。
当然还有AOP的一系列的注解,不在此一一述说。
SpringMVC的常用注解
@PathVariable
URI模板 “favusers/{favUserId}"指定变量的名字 favUserId ,当控制器处理这个请求的时候, favUserId的值会被设定到URI中。比如,当有一个像“favusers/favccxx”这样的请求时,favUserId的值就是 favccxx。
@PathVariable 可以有多个注解,像下面这样:
@RequestParam
该注解将请求的参数绑定到方法中的参数上。如果想自定义指定参数的话,如果将@RequestParam的 required 属性设置为false
(如@RequestParam(value="id",required=false))。
@ModelAttribute
该注解可以作用在方法或方法参数上,该注解支持一个属性value,类型为String,表示绑定的属性名称。
当它作用在方法上时,标明该方法的目的是添加一个或多个模型属性(model attributes)。该方法支持与@RequestMapping一样的参数类型,但并不能直接映射成请求。控制器中的@ModelAttribute方法会在@RequestMapping方法调用之前而调用。
@ModelAttribute方法有两种风格:一种是添加隐形属性并返回它。另一种是该方法接受一个模型并添加任意数量的模型属性。用户可以根据自己的需要选择对应的风格。
请举例说明@Qualifier注解?
@Qualifier注解意味着可以在被标注bean的字段上可以自动装配。
下面的示例将会在Customer的person属性中自动装配person的值。
在配置文件中配置Person类。
但是这样子Spring不知道要给Customer装配那个bean。所以我们需要用到@Qualifier
@Autowired和@Resource的区别是什么?
相同点:@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。
不同点:
@Autowired注解由Spring提供,默认按类型装配,默认情况下要求依赖对象必须存在,如果要允许为null,则需要设置required属性为false。
如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:
@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方式进行装配
示例代码
@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;