JavaWeb开发之-Spring的注释的使用

1.为什么要使用spring注释?

        传统的spring框架是使用.xml配置文件读取JavaBean的定义信息或者配置AOP和事物,这样如果开发中

        的JavaBean类众多,那么.xml配置文件要配置的内容很多。

    解决方法:spring引入了注释,通过"@XXX"的方式,让注释与Java Bean紧密结合,减少了配置文件的

                           书写,又增加了Java   Bean的可读性与内聚性。

2.Spring注释有哪些?作用是什么?

  

2.1 @Controller注释

  •       @Controller注释对应表现层的Bean,也就是Action,使用@Controller注解标识Action以后,就表示把Action交给

       Spring容器管理。@Controller用于标记一个类上,使用它标记的类是一个SpringMVC Controller对象。分发处

       理器将会扫描使用了该注释的类的方法,并检测该方法是否使用@RequestMapping注释

@Controller
@Scope("prototype")
public class UserAction extends BaseAction<User>{
 ……
}
使用@Controller注解标识UserAction之后,就表示要把UserAction交给Spring容器管理,在Spring容器中会存在一个名字为"userAction"的action,这个名字是根据UserAction类名来取的。注意:如果@Controller不指定其value【@Controller】,则默认的bean名字为这个类的类名首字母小写,如果指定value【@Controller(value="UserAction")】或者【@Controller("UserAction")】,则使用value作为bean的名字。
  •       单单使用@Controller标记在一个类上,还不能真正意义上的说它就是一个SpringMVC的一个控制器类。因为这

             时候Spring还不认识它,那么要如何做Spring才能认识它呢?这个时候就需要我们把这个控制器类交给spring来

              管理。

    有两种方式可以把控制器类(例如这个控制类是MyController)交给Spring管理,可以让它能够识别我们标记

    的@Controller!

      1.在SpringMVC的配置文件中定义MyController的bean对象

            <bean  class="com.host.app.web.controller.MyController"/>

     2.在SpringMVC的配置文件中告诉哪里会找标记为@Controller的Controller控制器

      <context: component-scan base-package="com.host.app.web.controller">

           <context: exclude-filter type="annotation" expression="org.springframework.web."/>

      </context: component-scan>

 

 2.2 @RequestMapping注释(属于SpringMVC)

@RequestMapping注释是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

上面说了@Controller只是定义了一个控制器类,而使用@RequestMapping注释的方法才是真正处理请求的处理器。

例如:

  @RequestMapping("/showView")标记在Controller方法上,表示请求/showView.do的时候访问的是MyController的showView方法,该方法返回了一个包含Model和View的ModelAndView对象。

  

2.3 @Autowired注释

@Autowired,顾名思义,就是自动装配,其作用是为了消除Java代码里面的getter/setter与bean属性中的property。当然,getter看个人需求,如果私有属性需要对外提供的话,应当予以保留。

@Autowired默认按类型匹配的方式,在容器查找匹配的Bean,当有且仅有一个匹配的Bean时,Spring将其注入@Autowired标注的变量中。

例如: 

    你要在userService里面要做一个userDao的setter/getter方法

   如果你使用@Autowired注释,只需要在userService的实现类中声名即可:   

@Autowired
private IUserDao userDao;

使用@Autowired的原理是什么?

其实在启动Spring IOC时,容器自动装载了一个AutowiredAnnotationBeanPostProcessor后置处理器,当容器扫描到@Autowired时,就会自动在IOC容器中查找需要的bean,并装配该对象的属性。

在使用@Autowired注释时首先在容器中查询对应类型的bean

     1.如果查询结果刚好一个,就将该Bean装配给@Autowired指定的数据

     2.如果查询的结果不止一个,那么@Autowired会根据名称查找

     3.如果查询结果不为空,那么会抛出异常,解决办法: 使用required=false

 

2.4 @Service注释

@Service注释,用于标注业务层组件

@Service("userService")注释是告诉Spring,当Spring要创建userServiceImpl的实例时,bean的名字必须叫做"userService",这样,当Action需要使用userServiceImpl实例时,就可以由Spring创建好的"userService",然后注入给Action。

 

2.5  @Repository注释

   @Repository注释,用于标注持久层组件

@Repository(value="userDao")告诉Spring,让Spring创建一个名字叫"userDao"的userDaoImpl实例时,创建好的"userDao"注入给service。

我们在没有用注释的,写Spring配置文件的时候,会在Spring配置文件中定义Dao层的bean,这样,我们在
service层中,写setDao方法,就可以直接通过接口调用Dao层。

1.只需要在Dao实现类中加入
    @Repository
   public class TestDaoImpl(){
      ........
        }

2.在service层定义
     @Autowired
   public TestDao testDao;
  (不需要写setDao方法,就可以通过接口调用Dao了!)

3.在service层加入
    @Service
 public class TestService(){
   ........
   }

4.在Action层直接写
   @Controller
  public class TestAction(){
    .......
      }

2.6  @Component注释

   @Component注释,当组件不好归类的时候,就使用这个注释进行标注

 

2.7  @Resource注释

@Resource注释,可以标注在字段或属性的setter方法上,但它默认按名称装配,名称可以通过@Resource的name属性指定,如果没有指定name属性,当注释标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象。

 

2.8 @ResponseBody注释

@ResponseBody注释的作用是将@Controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到

response对象的body区,通常用来返回JSON数据或者是XML数据,需要注意的是,使用此注释之后不会再走视图处理器,

而是直接将数据写入输入流中。

一般在异步获取数据时使用,在使用@RequestMapping后,返回值同城解析为跳转路径,加上@ResponseBody后,返回

结果不会解析为跳转路径,而是直接写入HTTP response body中。比如,异步获取json数据,加上@ResponseBody,会直接返回json数据。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值