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

目录
相关文章
|
Java 数据安全/隐私保护
SpringMVC+Spring+Mybatis实现登录注册Demo
SpringMVC+Spring+Mybatis实现登录注册Demo
281 0
SpringMVC+Spring+Mybatis实现登录注册Demo
|
Web App开发 Java 应用服务中间件
Maven+SpringMVC+Dubbo+zookeeper 简单的入门demo配置
参考:http://blog.csdn.net/aixiaoyang168/article/details/51362675 dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点(其他的详细介绍可以查看dubbo的
3224 0
|
4月前
|
设计模式 前端开发 JavaScript
Spring MVC(一)【什么是Spring MVC】
Spring MVC(一)【什么是Spring MVC】
|
1月前
|
Java Apache vr&ar
springmvc报错 nested exception is org.mybatis.spring.MyBatisSystemException:
springmvc报错 nested exception is org.mybatis.spring.MyBatisSystemException:
16 0
|
6月前
|
前端开发 Java Go
Spring MVC 和 Spring Boot 的区别
Spring MVC 和 Spring Boot 的区别
110 0
|
9月前
|
Java Spring
springmvc中spring提供的中文乱码解决问题
可以解决浏览器的乱码问题
44 0
|
4月前
|
设计模式 前端开发 Java
Spring Boot之Spring MVC的工作原理 以及使用eclipse开发Spring MVC的Web应用实战(附源码)
Spring Boot之Spring MVC的工作原理 以及使用eclipse开发Spring MVC的Web应用实战(附源码)
45 0
|
4月前
|
设计模式 前端开发 Java
8:Spring MVC-Java Spring
8:Spring MVC-Java Spring
72 0
|
9月前
|
JSON 前端开发 Java
"《图书管理系统》利用SpringMvc$Spring$MyBatis (实操九)(一) "
"《图书管理系统》利用SpringMvc$Spring$MyBatis (实操九)(一) "
57 0
|
8月前
|
前端开发 Java 应用服务中间件
SpringMVC(基于Spring 的Web 层MVC 框架)--SpingMVC 执行流程--@RequestMapping的使用
SpringMVC(基于Spring 的Web 层MVC 框架)--SpingMVC 执行流程--@RequestMapping的使用
97 0