Spring 讲解(五)
Spring 中使用 xml 配置开发和使用注解开发案例
1、Spring 中使用 xml 配置开发案例
接口
public interface UserDao {
void add(User user);
}
========================================================================================
public interface UserService {
void add(User user);
}
接口的实现类
public class UserDaoImpl implements UserDao {
@Override
public void add(User user) {
System.out.println("Dao 添加用户信息======>" + user);
}
}
=========================================================================================
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void add(User user) {
System.out.println("Service 添加用户信息======>" + user);
userDao.add(user);
}
}
=========================================================================================
模拟UserAction调用方法
public class UserAction {
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
public void save(User user) {
System.out.println("UserAction 方法调用");
userService.add(user);
}
}
配置bean.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 1.配置dao-->
<bean id="userDao" class="com.example.demo.code.impl.UserDaoImpl"></bean>
<!-- 2.配置service -->
<bean id="userService" class="com.example.demo.code.impl.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>
<!--3.配置action-->
<bean id="userAction" class="com.example.demo.code.UserAction">
<property name="userService" ref="userService"></property>
</bean>
</beans>
测试函数
public class ServiceTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
UserAction userAction = context.getBean(UserAction.class);
User user = new User();
user.setUsername("玉皇大帝");
user.setPassword("888");
user.setAge(9999);
userAction.save(user);
}
}
结果如下所示:
UserAction 方法调用。
Service 添加用户信息======>User{username='玉皇大帝', password='888', age=9999}。
Dao 添加用户信息======>User{username='玉皇大帝', password='888', age=9999}
可以看出是一层一层调用到 :action -> service -> dao
2、Spring 中使用注解开发案例
接口不变。修改接口的实现类
@Repository
public class UserDaoImpl implements UserDao {
@Override
public void add(User user) {
System.out.println("Dao 添加用户信息======>" + user);
}
}
=========================================================================================
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public void add(User user) {
System.out.println("Service 添加用户信息======>" + user);
userDao.add(user);
}
}
=========================================================================================
@Controller
public class UserAction {
@Autowired
private UserService userService;
public void save(User user) {
System.out.println("UserAction 方法调用");
userService.add(user);
}
}
执行上面的测试函数即可在控制台打印和第一个案例一样的信息。
3、@Qualifier("id") & @Resource(name="id") 注解含义
如果在 UserServiceImpl 类上将注解修改为 @Service("myUserService")。如果需要注入指定 id 的类需要同时加上注解:@Autowired、@Qualifier("myUserService")。
@Autowired 是按照类型注入。
如果是接口,从容器中查找接口的实现类注入;如果是类,就在容器中查找类进行注入。
@Qualifier("id名称")是按照指定id注入。
@Resource(name="id") = @Autowired+@Qualifier("id") 。
4、@Scope("prototype") 和 @Scope("singleton")
@Scope("singleton")
修改测试代码,再次执行
public class ServiceTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
UserAction userAction = context.getBean(UserAction.class);
UserAction userAction2 = context.getBean(UserAction.class);
System.out.println(userAction);
System.out.println(userAction2);
}
}
控制台信息如下:
com.example.demo.code.UserAction@7098b907
com.example.demo.code.UserAction@7098b907
说明 Spring 注入默认是单例。
@Scope("prototype")
在 UserAction 加上注解 @Scope("prototype") ,再次执行测试函数。
控制台信息如下:
com.example.demo.code.UserAction@7098b907
com.example.demo.code.UserAction@503f91c3
说明 Spring 注入可以配置多例。
重点:Spring 中默认注入是单例的。
Spring 讲解(五)的更多相关文章
- Spring第五篇
在Spring第四篇中 我们主要介绍了set get的注入方式 在Spring第五篇中 我们主要介绍使用注解配置Spring 主要分为两个步骤 1 导包的同时引入新得约束 导包如下 1.1 重写注解代 ...
- Spring点滴五:Spring中的后置处理器BeanPostProcessor讲解
BeanPostProcessor接口作用: 如果我们想在Spring容器中完成bean实例化.配置以及其他初始化方法前后要添加一些自己逻辑处理.我们需要定义一个或多个BeanPostProcesso ...
- spring讲解
今日先简单介绍一下Spring bean 的 5 种效果域,然后详细介绍 singleton 和 prototype 这两种最常用的效果域. JavaSpring Bean的五种效果域 效果域的种类 ...
- 深入浅出Spring(五) SpringMVC
上一篇深入浅出Spring(四) Spring实例分析的博文中,咱们已经可以了解Spring框架的运行原理和实现过程,接下来咱们继续讲解Spring的一个延伸产品——Spring MVC 1.Spri ...
- Spring第五篇【cglib、手动实现AOP编程】
前言 到目前为止,已经简单学习了Spring的Core模块.也会怎么与Struts2框架进行整合了-.于是我们就开启了Spring的AOP模块了-在讲解AOP模块之前,首先我们来讲解一下cglib代理 ...
- Java框架之Spring(五)
本文主要介绍Spring中, 1 Spring JDBC 2 使用注解方式管理事务的传播行为 3 采用XML 方式配置事务 4 SH 整合 5 SSH 整合 一.Spring JDBC 1) 导包 , ...
- Spring(五):Spring&Struts2&Hibernate整合后,实现查询Employee信息
背景: 基于之前两篇文章<Spring(三):Spring整合Hibernate>.<Spring(四):Spring整合Hibernate,之后整合Struts2>,了解了如 ...
- spring学习(五) ———— 整合web项目(SSM)
一.SSM框架整合 1.1.整合思路 从底层整合起,也就是先整合mybatis与spring,然后在编写springmvc. 1.2.开发需求 查询商品列表(从数据库中查询) 1.3.创建web工程 ...
- Spring系列(五) 容器初始化过程源码
IoC/DI 的概念 容器是Spring的核心之一(另一个核心是AOP). 有了容器, IOC才可能实现. 什么使IoC? IoC就是将类自身管理的与其由依赖关系的对象的创建/关联和管理交予容器实现, ...
随机推荐
- HDU 6069 Counting Divisors —— 2017 Multi-University Training 4
Counting Divisors Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Oth ...
- Linux0.11内核源码——内核态线程(进程)切换的实现
以fork()函数为例,分析内核态进程切换的实现 首先在用户态的某个进程中执行了fork()函数 fork引发中断,切入内核,内核栈绑定用户栈 首先分析五段论中的第一段: 中断入口:先把相关寄存器压栈 ...
- 10.18.2 linux文件压缩与打包
tar压缩工具 tar 本身为一个打包工具,可以把目录打包成一个文件,它的好处是它把所有文件整合成一个大文件整体,方便拷贝或者移动. 语法:tar [-zjxcvfpP] filename tar 命 ...
- 攻防世界 | CAT
来自攻防世界官方WP | darkless师傅版本 题目描述 抓住那只猫 思路 打开页面,有个输入框输入域名,输入baidu.com进行测试 发现无任何回显,输入127.0.0.1进行测试. 发现已经 ...
- 点击按钮后URL呗改变
这里留个坑,Button默认类型是submit.没有写类型的,可能会导致触发Url改变.要么写类型,要么在按钮对应的Js方法里return.
- jenkins构建后操作archive the artfacts的用法
参考: https://blog.csdn.net/liqiangeastsun/article/details/79062806 Jenkins构建完成存档 Archive the artifact ...
- hive sql基础了解
会有些不一样 1 例如使用SQL 之前,要了解用了那个库,use jz_daojia 2 使用GET_JSON_OBJECT 函数等,以及参数 匹配 $.childBrithDay 挺有意思的.新玩意 ...
- Java程序的设计环境配置
一.下载主要的开发工具 JDK的下载 www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Ecli ...
- javascript中数组的应用总结
最近在总结javascript的相关应用,今天对js中的数组部分进行归纳总结,以便在以后的工作中有所参考. 1.在js中数组的定义方式有两种: var a = [1,2,3,4]; var b = n ...
- Spring clound 微服务--理解篇
定义:微服务就是一些协调工作的小而自治的服务 优点: 异构性:不同微服务可以使用不同的语言实现, 后端数据库也可以根据自身业务定义服务. 弹性: 一个组件不可用,不会导致级联故障.一个系统出了问题,不 ...