Java EE学习笔记(一)
spring入门程序:
1、导入Spring的4个基础包以及commons-logging的JAR包复制到lib目录中

2、src->com.itheima.ioc包下:
①UserDao.java
package com.itheima.ioc;
public interface UserDao { // 创建接口UserDao
public void say(); // 只声明say()方法,不能定义
}
②UserDaoImpl.java
package com.itheima.ioc;
public class UserDaoImpl implements UserDao{ // 创建接口UserDao的实现类UserDaoImpl
public void say() { // 需要定义接口中的say()方法
System.out.println("userDao say hello World !");
}
}
③控制反转测试类:TestIoC.java
package com.itheima.ioc; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestIoC {
public static void main(String[] args) {
// 1、初始化Spring容器,加载配置文件
String xmlPath = "beans.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath); // 2、通过容器获取userDao的Bean实例userDaoID
UserDao userDao = (UserDao) applicationContext.getBean("userDaoID"); // 3、调用实例中的say()方法
userDao.say(); //不需要自己new,都是从Spring容器直接获得
// 之前的实现:new 接口的实例
//UserDao userDao = new UserDaoImpl();
//userDao.say();
}
}
④UserService.java
package com.itheima.ioc;
public interface UserService { // 创建接口UserService
public void save(); // 只声明save()方法,不能定义
}
⑤UserServiceImpl.java
package com.itheima.ioc;
public class UserServiceImpl implements UserService{ // 创建接口UserService的实现类UserServiceImpl
// 之前的做法:方式1:接口 接口对象= new 实现类(),即
//private UserDao userDao = new UserDaoImpl();
//有了Spring之后(解耦:UserServiceImpl实现类使用了成员变量UserDao接口,不用知道接口具体的实现类),
// 方式2:接口+setter方法
// 1)、声明属性UserDao,(依赖的接口对象)
private UserDao userDao;
// 2)、添加UserDao属性的setter方法,Spring才能将创建的接口对象userDao赋值给调用者的成员变量userDao(接口实例对象)!!!
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
// 3、实现接口中的方法,需要重新定义
public void save() {
// 调用成员变量userDao中的say()方法,并执行输出语句
this.userDao.say();
System.out.println("userService add a user!");
}
}
⑥依赖注入测试类:TestDI.java
package com.itheima.ioc; import java.nio.channels.AcceptPendingException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestDI {
public static void main(String[] args) {
// 1、初始化spring容器,加载配置文件
String xmlPath = "beans.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
// 2、通过容器获取UserService的Bean实例userServiceID
//UserService userService = (UserService) applicationContext.getBean("userServiceID");
// 有了XML配置文件,那么Spring就可以通过配置文件中的bean-id来创建我们需要的对象,下面这样写就不用将其强转了
UserService userService = applicationContext.getBean("userServiceID", UserService.class);
// 3、调用实例中的save()方法
userService.save();
}
}
⑦配置文件:beans.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 上面是Spring的约束配置,无需手写,直接查文档 -->
<!-- 将指定类配置给Spring,让Spring创建其对象的实例 -->
<bean id="userDaoID" class="com.itheima.ioc.UserDaoImpl" ></bean>
<!-- 创建一个id为userDaoID的Bean实例,其中class属性用于指定需要实例化Bean的类 --> <!-- 添加一个id为userServiceID的Bean的实例 -->
<bean id="userServiceID" class="com.itheima.ioc.UserServiceImpl">
<!-- 将id为userDaoID的Bean实例注入到userService实例中,
即被依赖对象userDao也由Spring来管理,通过这种方法就降低了耦合度,完全由Spring的Bean来管理
-->
<property name="userDao" ref="userDaoID"></property>
<!-- property: 用于对属性赋值(注入),底层将执行setter方法
name:setter方法参数实例名,通过setter方法获得
ref:另一个bean的id值(接口实例类)的引用,创建userDao对象的bean的id值userDaoID
具体执行过程:先创建UserService对象,然后在根据property中的ref找到userDaoID并创建UserDao对象,
然后根据property中的name,通过setter方法对其赋值,这样就完成了依赖注入。
-->
</bean>
</beans>
3、执行结果:

Java EE学习笔记(一)的更多相关文章
- Java EE学习笔记(七)
MyBatis的核心配置 1.MyBatis的核心对象 1).SqlSessionFactory是MyBatis框架中十分重要的对象,它是单个数据库映射关系经过编译后的内存镜像,其主要作用是创建Sql ...
- Java EE学习笔记(十)
MyBatis与Spring的整合 1.整合环境搭建 1).要实现MyBatis与Spring的整合,很明显需要这两个框架的JAR包,但是只使用这两个框架中所提供的JAR包是不够的,还需要其他的JAR ...
- Java EE学习笔记(九)
MyBatis的关联映射 1.关联关系概述 1).实际的开发中,对数据库的操作常常会涉及到多张表,这在面向对象中就涉及到了对象与对象之间的关联关系.针对多表之间的操作,MyBatis提供了关联映射,通 ...
- Java EE学习笔记(八)
动态SQL 1.动态SQL中的元素 1).作用:无需手动拼装SQL,MyBatis已提供的对SQL语句动态组装的功能,使得数据库开发效率大大提高! 2).动态SQL是MyBatis的强大特性之一,My ...
- Java EE学习笔记(六)
初识MyBatis 1.MyBatis的定义 1).MyBatis(前身是iBatis)是一个支持普通SQL查询.存储过程以及高级映射的持久层框架. 2).MyBatis框架也被称之为ORM(Obje ...
- Java EE学习笔记(五)
Spring事务管理 1.Spring事务管理概述 1).在实际开发中,操作数据库时都会涉及到事务管理问题,为此Spring提供了专门用于事务处理的API.(事务特性:ACID,原子性,一致性,隔离性 ...
- Java EE学习笔记(四)
Spring的数据库开发 1.Spring JDBC 1).Spring JDBC模块的作用:Spring的JDBC模块负责数据库资源管理和错误处理,大大简化了开发人员对数据库的操作,使得开发人员可以 ...
- Java EE学习笔记(三)
Spring AOP 1.Spring AOP简介 1).AOP的全称是Aspect-Oriented Programming,即面向切面编程(也称面向方面编程).它是面向对象编程(OOP)的一种补充 ...
- Java EE学习笔记(二)
Spring中的Bean 1.Bean的配置: a).Bean的本质就是Java中的类,而Spring中的Bean其实就是对实体类的引用,来生产Java类对象,从而实现生产和管理Bean . b).S ...
随机推荐
- Android系统shell中的clear命令实现【转】
本文转载自:http://blog.csdn.net/morixinguan/article/details/73467845 之前一直不太清楚,当我们在shell命令行输入很多命令,会在屏幕上输出一 ...
- UVA1378 A Funny Stone Game —— SG博弈
题目链接:https://vjudge.net/problem/UVA-1378 题意: 两个人玩游戏,有n堆石子,两人轮流操作:于第i堆石子中取走一块石子,然后再往第j.k堆中各添加一块石子.其中 ...
- 写给精明Java开发者的测试技巧
我们都会为我们的代码编写测试,不是吗?毫无疑问,我知道这个问题的答案可能会从 “当然,但你知道怎样才能避免写测试吗?” 到 “必须的!我爱测试”都有.接下来我会给你几个小建议,它们可以让你编写测试变得 ...
- the generation has been cancelled because errors have been found by the check model
生成物理模型出现这个错误的话,那就打开“生成物理模型”(快捷键 ctrl+shift+p) 然后找到 Detail → Option 接着讲Check mode复选框去掉.
- C++对C的增强
一.namespace命名空间 1.C++命名空间基本常识所谓namespace,是指标识符的各种可见范围.c++标准程序库中的所有标识符都被定义与一个名为std的namespace中. 1.1:&l ...
- SQL Agent 与 Analysis Server 使用同一个账号
参考网址:http://www.cnblogs.com/wghao/archive/2010/12/21/1912217.html 场景: 部署了一个作业: 第一步:执行一个SSIS 包进行增量更新 ...
- 【Hadoop】MapReduce笔记(三):MapReduce的Shuffle和Sort阶段详解
一.MapReduce 总体架构 整体的Shuffle过程包含以下几个部分:Map端Shuffle.Sort阶段.Reduce端Shuffle.即是说:Shuffle 过程横跨 map 和 reduc ...
- UVa 1001 Say Cheese (Dijkstra)
题意:给定一个三维空间的一些球和起始位置和结束位置,问你最短要花的时间是多少. 析:建图,所有的位置都建立图,边权就是距离,最小求一次最短路即可. 代码如下: #pragma comment(link ...
- Codeforces Round #269 (Div. 2) A,B,C,D
CodeForces - 471A 首先要有四个数相等,然后剩下两个数不同就是Bear,否则就是Elephant. #include <bits/stdc++.h> using names ...
- HDU2819【二分匹配与矩阵的秩】
题意: 给出一个矩阵问能否实现对角线全部是1,能的话输出路径,不能的话输出-1 思路: 首先根据矩阵的性质,这一定是一个满秩矩阵,所以只根据行或列交换就一定能实现. 所以行和列构成二分图,然后跑一发匈 ...