今天看了注解注入觉得确实简化了xml配置,一般情况下Spring容器要成功启动的三大要件分别是:Bean定义信息,Bean实现类,以及spring本身。如果采取基于XML的配置,Bean信息和Bean实现类本身是分离的,而采用注解基于注解配置的方式,Bean定义信息通过在Bean实现类上标注注解实现,这种方式确实简化了xml配置,但是是不是某种程度增加了耦合?

常用的注解有Autowired、Resource、Qualifier、Service、Controller、Repository、Component,其中作用如下:

Autowired是自动注入,自动从spring的上下文找到合适的bean来注入,主要用来消除setter和getter方法

Resource用来指定名称注入

Qualifier和Autowired配合使用,指定bean的名称

Service,Controller,Repository分别标记类是Service层类,Controller层类,数据存储层的类,spring扫描注解配置时,会标记这些类要生成bean。

Component是一种泛指,标记类是组件,spring扫描注解配置时,会标记这些类要生成bean。

 上面的Autowired和Resource是用来修饰字段,构造函数,或者设置方法,并做注入的。而Service,Controller,Repository,Component则是用来修饰类,标记这些类要生成bean。
 
  • 基于注解的方式
首先定义一个风筝的Dao,代码很简单
 package com.xsf.springtest;

 import org.springframework.stereotype.Repository;

 @Repository
 public class kiteDao {

     private String driverType = "天空";

     public kiteDao(String palce) {
         this.driverType = place;
     }

     public kiteDao() {

     }

     public void flyKite(String kite) {
         String insertMsg = String.format("把风筝  %s 放到了 %s", kite, driverType);
         System.out.println(insertMsg);
     }

 }

下面使用常用的Autowired将刚才定义的Bean注解到addkite中去,该类为service类,因此该类标注@Service注解

 package com.xsf.springtest;

 import javax.annotation.Resource;

 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;

 @Service
 public class kiteService {

     @Autowired
     //将前面定义的kiteDao类的实例就会自动注入到kitedao的实例中了
     private kiteDao kitedao;

     public void addkite(String kite) {
         this.kitedao.flyKite(kite);
     }
 }

最后一个写一个测试代码,运行下面的测试代码即可看到信息

 package com.xsf.springtest;

 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;

 public class flyKiteTest
 {
     public static void main( String[] args )
     {
         //它的构造函数接受一个package的名称,来限定要扫描的package。然后就可以通过appContext的getBean方法获得的实例了
         ApplicationContext appContext = new AnnotationConfigApplicationContext("com.xsf.springtest");

 ;
         kiteService service = appContext.getBean(kiteService.class);
         service.addkite("大蝴蝶");
     }
 }
  • 注解与xml混合的方式

在source文件夹下面新建spring.xml文件这里的bean id为kitedao与kiteService中的一致若不一致会报错(或者在@Autowired 后加上  @Qualifier("###")将kiteService中的kitedao换做对应的###即可)

 <?xml version="1.0" encoding="utf-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-3.0.xsd ">

     <context:annotation-config />
     <!-- 扫描包 -->
     <context:component-scan base-package="com.xsf.springtest">
     </context:component-scan>

     <!-- 定义一个id为kitedao的Bean 他的构造函数palce的值为sqlite -->
     <bean id="kitedao" class="com.xsf.springtest.kiteDao">
         <constructor-arg name="place" value="树上" />
     </bean>
 </beans>
  

此时测试代码中使用ApplicationContext appContext = new ClassPathXmlApplicationContext("/spring.xml");连接配置文件即可

 package com.xsf.springtest;

 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;

 public class flyKiteTest
 {
     public static void main( String[] args )
     {
         //它的构造函数接受一个package的名称,来限定要扫描的package。然后就可以通过appContext的getBean方法获得的实例了
        //ApplicationContext appContext = new AnnotationConfigApplicationContext("com.xsf.springtest");
         //通过spring配置文件加载类
         ApplicationContext appContext = new ClassPathXmlApplicationContext("/spring.xml");
         kiteService service = appContext.getBean(kiteService.class);
         service.addkite("大蝴蝶");
     }
 }

Springmvc注解注入的简单demo的更多相关文章

  1. 注解学习(模仿springMvc的注解注入方式)

    最近在看springMvc的源码,看到了该框架的注入注解的部分觉的有点吃力,可能还是对注解的方面的知识还认识的不够深刻,所以特意去学习注解方面的知识.由于本人也是抱着学习的态度来阅读源码,若文章在表述 ...

  2. springMvc的注解注入方式

    springMvc的注解注入方式 最近在看springMvc的源码,看到了该框架的注入注解的部分觉的有点吃力,可能还是对注解的方面的知识还认识的不够深刻,所以特意去学习注解方面的知识.由于本人也是抱着 ...

  3. 解决 SpringMVC 非spring管理的工具类使用@Autowired注解注入DAO为null的问题

    在SpringMVC框架中,我们经常要使用@Autowired注解注入Service或者Mapper接口,我们也知道,在Controller层中注入service接口,在service层中注入其它的s ...

  4. 使用注解注入properties中的值的简单示例

    spring使用注解注入properties中的值的简单示例   1.在web项目的src目录下新建setting.properties的文件,内容如下: version=1 2.在spring的xm ...

  5. springMVC 注解版

    http://blog.csdn.net/liuxiit/article/details/5756115 http://blog.csdn.net/hantiannan/article/categor ...

  6. Spring+SpringMVC+MyBatis深入学习及搭建(十六)——SpringMVC注解开发(高级篇)

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7085268.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十五)——S ...

  7. springMVC注解方式+easyUI+MYSQL配置实例

    刚接触springMVC,使用的注解方式,也在学习阶段,所以把自己学习到的记下来.本文利用springMVC从数据库读取用户信息为例,分享一下. 1.准备相关架包及资源.因为使用springMVC+e ...

  8. 《SpringMVC从入门到放肆》八、SpringMVC注解式开发(基本配置)

    上一篇我们结束了配置式开发,配置式开发目前在企业中用的并不是很多,大部分企业都在使用注解式开发,所以今天我们就来学习注解式开发.所谓SpringMVC注解式开发是指,处理器是基于注解的类的开发方式.对 ...

  9. spring常用的一些注解以及注解注入总结

    常用的spring注解有如下几种: @Controller@Service@Autowired@RequestMapping@RequestParam@ModelAttribute@Cacheable ...

随机推荐

  1. [WC2006]水管局长数据加强版

    Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一 ...

  2. Conjugate

    1.1Conjugate问题描述在不存在的 noip day3 里,小 w ⻅到了一堆堆的谜题.比如这题为什么会叫共轭?他并不知道答案.有 n 堆谜题,每堆有 a i 个,小 w 每次从剩下的谜题中选 ...

  3. codeforces 523D tatistics of Recompressing Videos

    一个称为DH(DogHouse)的狗的社交网络有k台专用服务器来重新上传可爱的猫的上传视频.每个视频上传后,应该在一个(任何)服务器上重新压缩,之后才可以保存在社交网络中. 我们知道每个服务器需要一秒 ...

  4. ●Joyoi Dotp 驱逐猪猡

    题链: http://www.joyoi.cn/problem/tyvj-2610题解: 期望dp,高斯消元 对于每一种到达i点的方案,都存在一个概率p, 令dp[i]表示到达i点的期望次数,那么容易 ...

  5. ●POJ poj 2112 Optimal Milking

    ●题目大意: 给出K个挤奶机器(编号1~K),C头牛(编号K+1~K+C)(机器和牛各在不同的地方)和每台机器最多可M头牛挤奶: 然后以邻接矩阵告诉各点间的直接距离(不同的地方间若直接距离等于0,则表 ...

  6. [BSGS算法]纯水斐波那契数列

    学弟在OJ上加了道"非水斐波那契数列",求斐波那契第n项对1,000,000,007取模的值,n<=10^15,随便水过后我决定加一道升级版,说是升级版,其实也没什么变化,只 ...

  7. poj2947 高斯消元

    Widget Factory Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 5218   Accepted: 1802 De ...

  8. 基于pytorch实现HighWay Networks之Highway Networks详解

    (一)简述---承接上文---基于pytorch实现HighWay Networks之Train Deep Networks 上文已经介绍过Highway Netwotrks提出的目的就是解决深层神经 ...

  9. Windows 下 Ionic 开发环境搭建

    Ionic 介绍 首先,Ionic 是什么. Ionic 是一款基于 Cordova 及 Angular 开发 Hybrid/Web APP 的前端框架,类似的其他框架有:Intel XDK等. 简单 ...

  10. ionic3-ng4学习见闻--(自定义ion-tab图标)

    学习混合开发语言,目的就是为了快速开发一个适用于多平台的app. app基本都会有footer,也就是tabbar,用来快速导航不同的页面. ionic也有这个组件,ion-tab. 常用方法如下: ...