Spring注解浅入浅出——不吹牛逼不装逼
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注解浅入浅出——不吹牛逼不装逼相关推荐
- Spring MVC浅入浅出——不吹牛逼不装逼
Spring MVC浅入浅出--不吹牛逼不装逼 前言 上文书说了Spring相关的知识,对Spring来了个浅入浅出,大家应该了解到,Spring在三层架构中主做Service层,那还有Web层,也就 ...
- Spring的数据库编程浅入浅出——不吹牛逼不装逼
Spring的数据库编程浅入浅出--不吹牛逼不装逼 前言 上文书我写了Spring的核心部分控制反转和依赖注入,后来又衔接了注解,在这后面本来是应该写Spring AOP的,但我觉得对于初学者来说,这 ...
- Spring浅入浅出——不吹牛逼不装逼
Spring浅入浅出--不吹牛逼不装逼 前言: 今天决定要开始总结框架了,虽然以前总结过两篇,但是思维是变化的,而且也没有什么规定说总结过的东西就不能再总结了,是吧.这次总结我命名为浅入浅出,主要在于 ...
- Java 注解 (Annotation)浅入深出
Java 注解 (Annotation)浅入深出 本文主要参考与借鉴frank909 文章,但更为简单,详细. Annotation 中文译过来就是注解.标释的意思.Annotation是一种应用于类 ...
- Angular浅入深出系列 - 写在前面
本系列目录: 写在前面 基础知识 控制器(Controller) 作用域(Scope) 集合(Collection) 模块(Module) 依赖注入(Dependency Injection) 服务( ...
- 浅入浅出Javac编译原理——爪哇岛探险(1)
浅入浅出Javac编译原理 Java语言是当今程序员中使用最广的语言,不光是从语言本身来说,还包括了与Java相关的一些概念.例如JDK,J2EE,JVM等等.还不断有新的语言出现,如groove,s ...
- 编译原理代码生成器java_浅入浅出Javac编译原理
浅入浅出Javac编译原理 Java语言是当今程序员中使用最广的语言,不光是从语言本身来说,还包括了与Java相关的一些概念.例如JDK,J2EE,JVM等等.还不断有新的语言出现,如groove,s ...
- [科普]浅入浅出Liunx Shellcode
创建时间:2008-05-13 文章属性:原创 文章提交: pr0cess (pr0cess_at_cnbct.org) 浅入浅出Liunx Shellcode /*---------------- ...
- 浅入深出之Java集合框架(上)
Java中的集合框架(上) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到浅入深出之Java集合框架(下). ...
最新文章
- 理解并取证:DHCP的工作原理、怎么检测IP地址冲突
- QT,C++最好的调试工具(抽象定义上的工具)
- Spring学习12之AOP2
- Good Technology 产品特色
- 数据中心两种常用流量模型运用mininet的实现
- SAP成都研究院CEC团队三巨头之一:M君的文章预告
- VM虚拟机跟主机间共享文件
- oracle并发执行max,跪求大量并发执行insert into select语句的方案
- qfile指定从多少行开始_大牛进化路上之Linux基础命令,看看你了解多少?
- AI(3)--手机上的AI技术
- Linux 服务器安全加固 10条建议
- 【EJB】Developing EJB Applications -- Chapter 2(创建企业级Bean项目)
- iOS 11.2 - 11.3.1 越狱教程
- 开源音乐软件——落雪
- 批量给 Word、Excel、PPT 和 PDF 设置文件保护打开密码和只读密码
- 关于define与defined的区别
- 项目总结:快餐店POS收银系统
- 电脑版敬业签记事本软件如何清除某个分类所有内容
- 百度红包架构分析与推测
- matlab提取数据画图,matlab提取excel表格数据画图-如何将Excel中的数据导入MATLAB并在MATLAB中画出图......
热门文章
- asp获取计算机mac,ASP获取客户端MAC地址(源代码)
- 2038年问题 php,php strtotime() mktime() 的2038年问题 Y2K38漏洞
- Linux和windows下多线程的区别
- 载波监听多路访问CSMA以及CSMA/CD详解
- 数据库实验3 数据库的单表查询
- bzoj 4318: OSU!(概率DP)
- JDK源码解析--Object类
- 一个demo学会jquery mobile
- python机器学习库keras——CNN卷积神经网络人脸识别
- python后台——asyncio,多进程+asyncio