Spring注解浅入浅出——不吹牛逼不装逼

前情提要

上文书咱们说了《Spring浅入浅出》,对Spring的核心思想看过上篇的朋友应该已经掌握了,此篇用上篇铺垫,引入注解,继续深入学习。

引入注解

在Spring框架中,尽管使用XML配置文件可以很简单地装配Bean,但如果应用中有大量的Bean需要装配,会导致XML配置文件过于庞大,不方便以后的升级与维护,因此,推荐开发者使用注解的方式去装配Bean。

注解详解

对注解不清楚的可以看我博客《注解》 ,其实注解就是一个类,在开发中使用注解取代XML配置文件。

1. @Component 取代 <bean class=""></bean>
    @Component("id的值")

2. web开发中,提供3个@Component注解衍生注解(功能一样)取代 <bean class=""></bean>
    @Repository :dao层
    @Service :service层
    @Controller :web层
        注意:SpringMVC 中推荐使用注解哦!
3. 依赖注入,给私有字段设置,也可以给setter方法设置
    普通值:@Value("")
    引用值:
        方式1:按照【类型】注入
            @Autowired
        方式2:按照【类型+名称】注入1
            @Autowired
            @Qualifier("名称")
        方式3:按照【名称】注入2
            @Resource("名称")
4. 生命周期
    @PostConstruct :初始化
    @PreDestroy :销毁
5. 作用域
    @Scope("prototype") 多例

配置注解

使用注解有了Bean的实现类,但现在Spring容器并不知道去哪里扫描Bean对象,需要在配置文件中配置注解。

<?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"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><!—使用context命名空间,通过Spring扫描指定包annotation及子包下所有Bean的实现类,进行注释解析--><context:component-scan base-package="com.my"></context:component-scan></beans>

  

 

案例实践

一、Pom.xml

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency><!--spring核心依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.1.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.1.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.1.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>5.1.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.1.5.RELEASE</version></dependency></dependencies>

  

二、spring-config.xml

<?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"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--配置注解要扫描的包--><context:component-scan base-package="com.my"></context:component-scan>
</beans>

  

三、UserDao

package com.my.dao;public interface UserDao {public void add();public void delete();public void update();public void query();}

  

四、UserDaoImpl

package com.my.dao.impl;import com.my.dao.UserDao;import org.springframework.stereotype.Repository;@Repositorypublic class UserDaoImpl implements UserDao {@Overridepublic void add() {System.out.println("UserDao中的添加功能实现了");}@Overridepublic void delete() {System.out.println("UserDao中的删除功能实现了");}@Overridepublic void update() {System.out.println("UserDao中的修改功能实现了");}@Overridepublic void query() {System.out.println("UserDao中的查询功能实现了");}}

  

五、UserService

package com.my.service;public interface UserService {public void add();public void delete();public void update();public void query();}

  

六、UserServiceImpl

package com.my.service.impl;import com.my.dao.UserDao;import com.my.dao.impl.UserDaoImpl;import com.my.service.UserService;import org.springframework.stereotype.Service;@Servicepublic class UserServiceImpl implements UserService {private UserDao userDao = new UserDaoImpl();@Overridepublic void add() {userDao.add();}@Overridepublic void delete() {userDao.delete();}@Overridepublic void update() {userDao.update();}@Overridepublic void query() {userDao.query();}}

  

七、UserController

package com.my.controller;import com.my.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import org.springframework.stereotype.Controller;import org.springframework.stereotype.Service;@Controllerpublic class UserController {@Autowiredprivate UserService userService;public void add(){userService.add();}public void delete(){userService.delete();}public void update(){userService.update();}public void query(){userService.query();}}

  

八、测试Test2

package com.my.test;import com.my.controller.UserController;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test2 {public static void main(String[] args) {ApplicationContext appCon = new ClassPathXmlApplicationContext("spring-config.xml");UserController userController = (UserController) appCon.getBean("userController");userController.add();userController.delete();userController.update();userController.query();}}

  

九、测试结果

结束总结

看完此篇及上篇的朋友应该掌握Bean的两种常用装配方式,即基于XML配置的装配和基于注解的装配,其中此篇基于注解的装配方式尤其重要,它是当前的主流装配方式。

*****************************************************************************************************

我的博客园地址:https://www.cnblogs.com/zyx110/

转载请说明出处

我不能保证我所说的都是对的,但我能保证每一篇都是用心去写的,我始终认同“分享的越多,你的价值增值越大”,欢迎大家关注我的技术分享“Java匹马行天下”和学习心得分享“匹马行天下”,在分享中进步,越努力越幸运,人生赢在转折处,改变从现在开始!

支持我的朋友们记得点波推荐哦,您的肯定就是我前进的动力。

转载于:https://www.cnblogs.com/zyx110/p/11310139.html

Spring注解浅入浅出——不吹牛逼不装逼相关推荐

  1. Spring MVC浅入浅出——不吹牛逼不装逼

    Spring MVC浅入浅出--不吹牛逼不装逼 前言 上文书说了Spring相关的知识,对Spring来了个浅入浅出,大家应该了解到,Spring在三层架构中主做Service层,那还有Web层,也就 ...

  2. Spring的数据库编程浅入浅出——不吹牛逼不装逼

    Spring的数据库编程浅入浅出--不吹牛逼不装逼 前言 上文书我写了Spring的核心部分控制反转和依赖注入,后来又衔接了注解,在这后面本来是应该写Spring AOP的,但我觉得对于初学者来说,这 ...

  3. Spring浅入浅出——不吹牛逼不装逼

    Spring浅入浅出--不吹牛逼不装逼 前言: 今天决定要开始总结框架了,虽然以前总结过两篇,但是思维是变化的,而且也没有什么规定说总结过的东西就不能再总结了,是吧.这次总结我命名为浅入浅出,主要在于 ...

  4. Java 注解 (Annotation)浅入深出

    Java 注解 (Annotation)浅入深出 本文主要参考与借鉴frank909 文章,但更为简单,详细. Annotation 中文译过来就是注解.标释的意思.Annotation是一种应用于类 ...

  5. Angular浅入深出系列 - 写在前面

    本系列目录: 写在前面 基础知识 控制器(Controller) 作用域(Scope) 集合(Collection) 模块(Module) 依赖注入(Dependency Injection) 服务( ...

  6. 浅入浅出Javac编译原理——爪哇岛探险(1)

    浅入浅出Javac编译原理 Java语言是当今程序员中使用最广的语言,不光是从语言本身来说,还包括了与Java相关的一些概念.例如JDK,J2EE,JVM等等.还不断有新的语言出现,如groove,s ...

  7. 编译原理代码生成器java_浅入浅出Javac编译原理

    浅入浅出Javac编译原理 Java语言是当今程序员中使用最广的语言,不光是从语言本身来说,还包括了与Java相关的一些概念.例如JDK,J2EE,JVM等等.还不断有新的语言出现,如groove,s ...

  8. [科普]浅入浅出Liunx Shellcode

    创建时间:2008-05-13 文章属性:原创 文章提交: pr0cess  (pr0cess_at_cnbct.org) 浅入浅出Liunx Shellcode /*---------------- ...

  9. 浅入深出之Java集合框架(上)

    Java中的集合框架(上) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到浅入深出之Java集合框架(下). ...

最新文章

  1. 理解并取证:DHCP的工作原理、怎么检测IP地址冲突
  2. QT,C++最好的调试工具(抽象定义上的工具)
  3. Spring学习12之AOP2
  4. Good Technology 产品特色
  5. 数据中心两种常用流量模型运用mininet的实现
  6. SAP成都研究院CEC团队三巨头之一:M君的文章预告
  7. VM虚拟机跟主机间共享文件
  8. oracle并发执行max,跪求大量并发执行insert into select语句的方案
  9. qfile指定从多少行开始_大牛进化路上之Linux基础命令,看看你了解多少?
  10. AI(3)--手机上的AI技术
  11. Linux 服务器安全加固 10条建议
  12. 【EJB】Developing EJB Applications -- Chapter 2(创建企业级Bean项目)
  13. iOS 11.2 - 11.3.1 越狱教程
  14. 开源音乐软件——落雪
  15. 批量给 Word、Excel、PPT 和 PDF 设置文件保护打开密码和只读密码
  16. 关于define与defined的区别
  17. 项目总结:快餐店POS收银系统
  18. 电脑版敬业签记事本软件如何清除某个分类所有内容
  19. 百度红包架构分析与推测
  20. matlab提取数据画图,matlab提取excel表格数据画图-如何将Excel中的数据导入MATLAB并在MATLAB中画出图......

热门文章

  1. asp获取计算机mac,ASP获取客户端MAC地址(源代码)
  2. 2038年问题 php,php strtotime() mktime() 的2038年问题 Y2K38漏洞
  3. Linux和windows下多线程的区别
  4. 载波监听多路访问CSMA以及CSMA/CD详解
  5. 数据库实验3 数据库的单表查询
  6. bzoj 4318: OSU!(概率DP)
  7. JDK源码解析--Object类
  8. 一个demo学会jquery mobile
  9. python机器学习库keras——CNN卷积神经网络人脸识别
  10. python后台——asyncio,多进程+asyncio