spring注解

spring的核心功能是IOC,就是将Bean初始化加入到容器中,怎么将Bean加入容器中,通过注解的方式和配置spring的xml文件
spring注解的方式减少了配置文件的内容,更加便于管理,大大提高了开发效率。

一. 组件类注解
问题:spring怎么知道把哪些java类作为bean注入到spring容器中
答案:通过配置文件 或者 注解的方式标识需要处理的java类
怎么使用注解的方式呢?

  1. 常用注解介绍
    ①@Component 标注一个普通的spring bean类
    ②@Repository 标注dao层
    ③@Service 标注一个业务逻辑层
    ④@Controller 标注一个控制器类(前后端的控制器类)
    这些注解使用率比较多,是同一类注解,用法相同,功能相同,区别在于扫描的组件类型不同。
    @Component能够替代其他三个注解,因为这三个注解被@Component标注的

  2. 注解实例

  3. 注意点
    ①被注解的java类作为bean实例,Bean实例的名称默认实例类的首个字母小写,其他不变。
    @Service也可以默认bean的实例名称,但必须是唯一的。
    ②尽量使用对应组件的注解替代@Companent注解,方便管理
    ③指定了某些类可以作为spring bean类使用之后,最好还再指定一下spring搜索的路径
    比如:
    自动扫描指定包及其子包下的所有bean类
    <context:component-scan base-package=“com.market.*”/>

二. 装配bean时常用注解

注解说明
  1. @Autowired属于Spring的org.springframework.beans.factory.annotation包下,可以用于为 类的属性,构造器,方法进行注值。
    注意点:
    ① 当Spring发现@Autowired注解时,将自动在代码上下文中找到和其匹配(默认是类型byType匹配,也可以设定为byName) 的Bean,并自动注入到相应的地方去。
    ② 如果@Autowired注解的属性在Spring的xml文件中没有找到指定的bean,会报出异常,因为是null的bean
    解决方法:
    @Autowired(required = false)
    设置这个属性为false
    ③ 如果@Autowired注解的属性是一个接口,这个接口有多个实现类那么spring不知道到底要使用哪个类,怎么办?
    解决方法:
    @Autowired
    @Qualifier(“BMW”)
    private Car car;
    再添加一个注解,括号里边的是接口实现类的类名。

  2. @Resource不属于spring注解,而是来自于JSR-250位于java.annotation包下,使用该 annotation为目标bean指定协作者Bean。
    ① @Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配
    ②@Resource有两个中重要的属性:name和type。name属性指定byName,如果没有指定 name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。
    需要注意的是,@Resource如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象时, @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。
    public class AnotationExp {
    @Resource(name = “HappyClient”)
    private HappyClient happyClient;
    @Resource(type = HappyPlayAno .class)
    private HappyPlayAno happyPlayAno; }
    注意点:使用@Resource也要注意添加配置文件到Spring,如果没有配置component-scan
    则一定要配置 annotation-config

  3. @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作

三. spring mvc 模块注解

  1. @Controller :表明该类会作为与前端作交互的控制层组件,通过服务接口定义的提供访问应用程序的一种行为
  2. ① @RequestMapping : 这个注解用于将url映射到整个处理类或者特定的处理请求的方法。可以只用通配符!
    ② @RequestMapping 既可以作用在类级别,也可以作用在方法级别。
 @RequestMapping(/hello/*) 
     public void sayHello(){ 
     //请求为 /happy/hello/* 都会进入这个方法! 
     //例如:/happy/hello/123 /happy/hello/adb //可以通过get/post 请求 }      
     @RequestMapping(value="/haha",method=RequestMethod.GET) 
     public void sayHaHa(){ //只能通过get请求 }

③@RequestParam :将请求的参数绑定到方法中的参数上,有required参数,默认情况
下,required=true,也就是改参数必须要传。如果改参数可以传可不传,可以配置
required=false

   @RequestMapping("/happy")
    public String sayHappy( 
    @RequestParam(value = "name", required = false) String name, 
    @RequestParam(value = "age", required = true) String age)
     { //age参数必须传 ,name可传可不传 ... }

④ @PathVariable : 该注解用于方法修饰方法参数,会将修饰的方法参数变为可供使用的uri变量(可用于动态绑定)。

 @RequestMapping(value="/happy/{dayid}",method=RequestMethod.GET)
 public String findPet(@PathVariable String dayid, Model mode)
  { //使用@PathVariable注解绑定 {dayid} 到String dayid }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值