Springmvc注解注入的简单demo

今天看了注解注入觉得确实简化了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,代码很简单

 1 package com.xsf.springtest;
 2
 3 import org.springframework.stereotype.Repository;
 4
 5
 6 @Repository
 7 public class kiteDao {
 8
 9     private String driverType = "天空";
10
11     public kiteDao(String palce) {
12         this.driverType = place;
13     }
14
15     public kiteDao() {
16
17     }
18
19     public void flyKite(String kite) {
20         String insertMsg = String.format("把风筝  %s 放到了 %s", kite, driverType);
21         System.out.println(insertMsg);
22     }
23
24 }

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

 1 package com.xsf.springtest;
 2
 3 import javax.annotation.Resource;
 4
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.beans.factory.annotation.Qualifier;
 7 import org.springframework.stereotype.Service;
 8
 9 @Service
10 public class kiteService {
11
12     @Autowired
13     //将前面定义的kiteDao类的实例就会自动注入到kitedao的实例中了
14     private kiteDao kitedao;
15
16     public void addkite(String kite) {
17         this.kitedao.flyKite(kite);
18     }
19 }

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

 

 1 package com.xsf.springtest;
 2
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 5 import org.springframework.context.support.ClassPathXmlApplicationContext;
 6
 7
 8 public class flyKiteTest
 9 {
10     public static void main( String[] args )
11     {
12         //它的构造函数接受一个package的名称,来限定要扫描的package。然后就可以通过appContext的getBean方法获得的实例了
13         ApplicationContext appContext = new AnnotationConfigApplicationContext("com.xsf.springtest");
14
15 ;
16         kiteService service = appContext.getBean(kiteService.class);
17         service.addkite("大蝴蝶");
18     }
19 }
  •  注解与xml混合的方式

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

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
 4     xsi:schemaLocation="http://www.springframework.org/schema/beans
 5  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 6  http://www.springframework.org/schema/context
 7  http://www.springframework.org/schema/context/spring-context-3.0.xsd ">
 8
 9     <context:annotation-config />
10     <!-- 扫描包 -->
11     <context:component-scan base-package="com.xsf.springtest">
12     </context:component-scan>
13
14     <!-- 定义一个id为kitedao的Bean 他的构造函数palce的值为sqlite -->
15     <bean id="kitedao" class="com.xsf.springtest.kiteDao">
16         <constructor-arg name="place" value="树上" />
17     </bean>
18 </beans>
19  

 

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

 1 package com.xsf.springtest;
 2
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 5 import org.springframework.context.support.ClassPathXmlApplicationContext;
 6
 7
 8 public class flyKiteTest
 9 {
10     public static void main( String[] args )
11     {
12         //它的构造函数接受一个package的名称,来限定要扫描的package。然后就可以通过appContext的getBean方法获得的实例了
13        //ApplicationContext appContext = new AnnotationConfigApplicationContext("com.xsf.springtest");
14         //通过spring配置文件加载类
15         ApplicationContext appContext = new ClassPathXmlApplicationContext("/spring.xml");
16         kiteService service = appContext.getBean(kiteService.class);
17         service.addkite("大蝴蝶");
18     }
19 }

转载:http://blog.csdn.net/xsf50717/article/details/45072063

时间: 2024-09-22 23:43:46

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

spring mvc-关于springmvc+mybatis 注入问题

问题描述 关于springmvc+mybatis 注入问题 service: package com.yhq.service.biz;import com.yhq.service.po.User;public interface UserBiz { void insert(User u);} impl: package com.yhq.service.impl;import org.springframework.beans.factory.annotation.Autowired;import

spring注解-service利用注解注入,会空指针异常。而用getBean方式则可以获取到service。

问题描述 service利用注解注入,会空指针异常.而用getBean方式则可以获取到service. spring配置文件如下: <?xml version=""1.0"" encoding=""UTF-8""?> xmlns:context=""http://www.springframework.org/schema/context"" xmlns:xsi="

spring mvc-急急急!!!springMVC 注解事务失效

问题描述 急急急!!!springMVC 注解事务失效 spring-hibernate.xml*<?xml version=""1.0"" encoding=""UTF-8""?>xmlns:context=""http://www.springframework.org/schema/context"" xmlns:p=""http://www.spr

使用springmvc注解报Forecast is not mapped

问题描述 使用springmvc注解报Forecast is not mapped 添加数据都能成功,就是查询是报错 进入query 2015-1-9 10:50:33 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet springMVC threw exception org.hibernate.hql.internal.ast.QuerySyntaxException:

想问下环信的ios Demo 从何入手,有没有简单的Demo,我只要简单单聊功能,求助,有简单Demo求分享,962369884@qq.com

问题描述 解决方案 ios简单demo已经上传http://www.imgeek.org/article/825307522Android 也开源了一个easeui集成的客服demo http://community.easemob.com/article/825307518解决方案二:视频里面有简单的集成教程,看下:http://i.youku.com/u/UMzAwMTk5ODg4NA==解决方案三:把你邮箱发我,我发一个给你.解决方案四:环信新版demo中加入了parse第三方框架,由此添

spring-Spring注解注入配置文件的值

问题描述 Spring注解注入配置文件的值 我在service层想获取properties文件中的值,如果用spring注解的方式去获取需要把Service类也注解为Component么? 解决方案 在Spring之前 在一个对象中调用另外一个类,需要在其内部实例化这个类,这样的结果是一旦类的数目增加代码的耦合度将变的非常高.为了降低耦合度,我们引入了Spring,Spring可以通过注入来降低代码的耦合度.即把生成对象的控制权交给容器,代码要做的只是使用这些对象进行逻辑或者持久化操作,这就是控

java之Timer和TimerTask简单demo(分享)_java

代码:测试类 public class MyTestTimer { public static Timer mTimer; public static void main(String[] args) { mTimer=new Timer(); MyTimerTask testTimer=new MyTimerTask(10000); mTimer.schedule(testTimer, 10000); } } TimerTask任务类 public class MyTimerTask exte

JSP使用过滤器防止SQL注入的简单实现_JSP编程

什么是SQL注入攻击?引用百度百科的解释: sql注入_百度百科: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句.[1]  比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这

远程注入DLL(简单描述)

远程注入DLL(简单描述) 远程注入DLL 建议在阅读本文前先阅读取得句柄的令牌 OpenProcessToken()函数一文! 没错,现在讨论的就是传说中的远程注入技术,目前一种非常流行的隐藏技术,因为它没有进程,是通过远程插入线程调用DLL文件实现的!在这里先说一下.dll文件,.dll文件,其实就是动态连接库,它里面装封了提供.exe文件调用的函数,一般情况下,双击它,是不能运行它的,它只能由.exe来调用,于是就有了远程注入了,原理很简单:我们把后门的主要功能写成一个函数,然后装封到.d