Spring框架(带你秒懂,超详细)
我们就想,如果能把框中的内容给去掉,不就可以降低依赖了么,但是又会引入新的问题,去掉以后。需要注意的一点是,构造方法在类中默认会提供,但是如果重写了构造方法,默认的就会消失,在使。在解决这个问题之前,需要提前说明的是,这个参数名发生变化的情况并不多,所以上面的还是比较。如果数据层的实现类发生变化,那么业务层的代码也需要跟着改变,发生变更后,都需要进行编译。容,接下来主要是把这三块内容展开进行详细的
掌握Spring相关概念
完成IOC/DI的入门案例编写
掌握IOC的相关配置与使用
掌握DI的相关配置与使用
1.1 为什么要学?
1.2 学什么?
1.3 怎么学?
2,Spring相关概念2.1 初识Spring
2.1.1 Spring家族

2.1.2 了解Spring发展史
2.2 Spring系统架构前面我们说spring指的是Spring Framework,那么它其中都包含哪些内容以及我们该如何学习这个
2.2.1 系统架构图
2.2.2 学习路线
2.3 Spring核心概念
2.3.1 目前项目中的问题
2.3.2 IOC、IOC容器、Bean、DI
2.3.3 核心概念小结
3,IOC相关内容
3.1 bean基础配置
3.1.1 bean基础配置(id与class)
1 <bean id="" class=""/>
3.1.2 bean的name属性
3.1.3 bean作用范围scope配置
3.1.3.1 验证IOC容器中对象是否为单例
3.1.3.2 配置bean为非单例
<bean id="bookDao" name="dao" class="com.dao.impl.BookDaoImpl"
scope=""/>
<bean id="bookDao" name="dao" class="com.dao.impl.BookDaoImpl"
scope="singleton"/>
4.14 bean基础配置小结
4.2 bean实例化

4.2.1 静态工厂实例化
4.2.2工厂方式创建bean
public interface OrderDao {
public void save();
}
public class OrderDaoImpl implements OrderDao {
public void save() {
System.out.println("order dao save ...");
}
}
//静态工厂创建对象
public class OrderDaoFactory {
public static OrderDao getOrderDao(){
return new OrderDaoImpl();
}
}
public class AppForInstanceOrder {
public static void main(String[] args) {
//通过静态工厂创建对象
OrderDao orderDao = OrderDaoFactory.getOrderDao();
orderDao.save();
}
}
4.2.4.2 静态工厂实例化
<bean id="orderDao" class="com.factory.OrderDaoFactory" factorymethod="getOrderDao"/>

1 public class AppForInstanceOrder {
2 public static void main(String[] args) {
3 ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");
4
5 OrderDao orderDao = (OrderDao) ctx.getBean("orderDao");
6
7 orderDao.save();
8
9 }
10 }
4.2.6 bean实例化小结
4.3 bean的生命周期
4.3.2 生命周期设置
<?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">
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
</beans>
public class AppForLifeCycle {
public static void main( String[] args ) {
ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
bookDao.save();
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ...");
}
//表示bean初始化对应的操作
public void init(){
System.out.println("init...");
}
//表示bean销毁前对应的操作
public void destory(){
System.out.println("destory...");
4.3.3 close关闭容器
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" init-method="init"
destroy-method="destory"/>
ClassPathXmlApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");

4.3.4 注册钩子关闭容器
public class BookServiceImpl implements BookService, InitializingBean,
DisposableBean {
private BookDao bookDao;
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
56
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
public void destroy() throws Exception {
System.out.println("service destroy");
}
public void afterPropertiesSet() throws Exception {
System.out.println("service init");
}
}
public void setBookDao(BookDao bookDao) {
System.out.println("set .....");
this.bookDao = bookDao;
}
验证的结果和我们猜想的结果是一致的,所以初始化方法会在类中属性设置之后执行。
4.3.5 bean生命周期小结
5,DI相关内容
public class BookServiceImpl implements BookService {
private BookDao bookDao;
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
}
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
</bean>
<bean id="bookDao" class="com.itheima.dao.imipl.BookDaoImpl"/>
(1)项目中添加BookDao、BookDaoImpl、UserDao、UserDaoImpl、BookService和
BookServiceImpl类
1 public interface BookDao {
2 public void save();
3 }
4
5 public class BookDaoImpl implements BookDao {
6 public void save() {
7 System.out.println("book dao save ...");
8 }
9 }
10 public interface UserDao {
11 public void save();
12 }
13 public class UserDaoImpl implements UserDao {
14 public void save() {
15 System.out.println("user dao save ...");
16 }
17 }
18
19 public interface BookService {
20 public void save();
21 }
22
23 public class BookServiceImpl implements BookService{
24 private BookDao bookDao;
25
26 public void setBookDao(BookDao bookDao) {
27 this.bookDao = bookDao;
28 }
29
30 public void save() {
31 System.out.println("book service save ...");
32 bookDao.save();
33 }
34 }
<?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">
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
</bean>
</beans>
public class AppForDISet {
public static void main( String[] args ) {
ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");
BookService bookService = (BookService) ctx.getBean("bookService");
bookService.save();
}
}
5.1.2 注入引用数据类型
public class BookServiceImpl implements BookService{
private BookDao bookDao;
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
5.1.3 注入简单数据类型
<?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">
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
<property name="userDao" ref="userDao"/>
</bean>
</beans>

5.1.3 注入简单数据类型
public class BookDaoImpl implements BookDao {
private String databaseName;
private int connectionNum;
public void setConnectionNum(int connectionNum) {
this.connectionNum = connectionNum;
}
public void setDatabaseName(String databaseName) {
this.databaseName = databaseName;
}
public void save() {
System.out.println("book dao save
..."+databaseName+","+connectionNum);
}
}
<?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">
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
<property name="databaseName" value="mysql"/>
<property name="connectionNum" value="10"/>
</bean>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
<property name="userDao" ref="userDao"/>
</bean>
<property name="connectionNum" value="abc"/>

5.2 构造器注入
5.2.1 环境准备
public interface BookDao {
public void save();
1
2
3 }
4
5 public class BookDaoImpl implements BookDao {
6
7 private String databaseName;
8 private int connectionNum;
9
10 public void save() {
11 System.out.println("book dao save ...");
12 }
13 }
14 public interface UserDao {
15 public void save();
16 }
17 public class UserDaoImpl implements UserDao {
18 public void save() {
19 System.out.println("user dao save ...");
20 }
21 }
22
23 public interface BookService {
24 public void save();
25 }
26
27 public class BookServiceImpl implements BookService{
28 private BookDao bookDao;
29
30 public void setBookDao(BookDao bookDao) {
31 this.bookDao = bookDao;
32 }
33
34 public void save() {
35 System.out.println("book service save ...");
36 bookDao.save();
37 }
38 }
<?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">
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
</bean>
</beans>
public class AppForDIConstructor {
public static void main( String[] args ) {
ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");
BookService bookService = (BookService) ctx.getBean("bookService");
bookService.save();
}
}
5.2.2 构造器注入引用数据类型
public class BookServiceImpl implements BookService{
private BookDao bookDao;
public BookServiceImpl(BookDao bookDao) {
this.bookDao = bookDao;
}
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
}
<?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">
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<constructor-arg name="bookDao" ref="bookDao"/>
</bean>
</beans>
5.2.3 构造器注入多个引用数据类型
public class BookServiceImpl implements BookService{
private BookDao bookDao;
private UserDao userDao;
public BookServiceImpl(BookDao bookDao,UserDao userDao) {
this.bookDao = bookDao;
this.userDao = userDao;
}
public void save() {
System.out.println("book service save ...");
bookDao.save();
userDao.save();
}
}
<?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">
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<constructor-arg name="bookDao" ref="bookDao"/>
<constructor-arg name="userDao" ref="userDao"/>
</bean>
</beans>
5.2.4 构造器注入多个简单数据类型
public class BookDaoImpl implements BookDao {
private String databaseName;
private int connectionNum;
public BookDaoImpl(String databaseName, int connectionNum) {
this.databaseName = databaseName;
this.connectionNum = connectionNum;
}
public void save() {
System.out.println("book dao save
..."+databaseName+","+connectionNum);
}
}
<?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">
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
<constructor-arg name="databaseName" value="mysql"/>
<constructor-arg name="connectionNum" value="666"/>
</bean>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<constructor-arg name="bookDao" ref="bookDao"/>
<constructor-arg name="userDao" ref="userDao"/>
</bean>
</beans>
上面已经完成了构造函数注入的基本使用,但是会存在一些问题:

<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
<constructor-arg type="int" value="10"/>
<constructor-arg type="java.lang.String" value="mysql"/>
</bean>
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
2 <constructor-arg index="1" value="100"/>
3 <constructor-arg index="0" value="mysql"/>
4 </bean>
<bean ...>
2 <property name="" value=""/>
3 </bean>
<bean ...>
2 <property name="" ref=""/>
3 </bean>
<bean ...>
2 <constructor-arg name="" index="" type="" value=""/>
3 </bean>
<bean ...>
<constructor-arg name="" index="" type="" ref=""/>
</bean>
1
2
3
5.3 自动配置
5.3.1 什么是依赖自动装配?
5.3.2 自动装配方式有哪些?
5.3.3 准备下案例环境
public interface BookDao {
2 public void save();
3 }
4
5 public class BookDaoImpl implements BookDao {
6
7 private String databaseName;
8 private int connectionNum;
9
10 public void save() {
11 System.out.println("book dao save ...");
12 }
13 }
14 public interface BookService {
15 public void save();
16 }
17
18 public class BookServiceImpl implements BookService{
19 private BookDao bookDao;
20
21 public void setBookDao(BookDao bookDao) {
22 this.bookDao = bookDao;
23 }
24
25 public void save() {
26 System.out.println("book service save ...");
27 bookDao.save();
28 }
29 }
<?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"
4 xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
5
6 <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
7 <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
8 <property name="bookDao" ref="bookDao"/>
9 </bean>
10 </beans>
public class AppForAutoware {
public static void main( String[] args ) {
ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");
BookService bookService = (BookService) ctx.getBean("bookService");
bookService.save();
}
}
5.3.4 完成自动装配的配置
<?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">
<bean class="com.itheima.dao.impl.BookDaoImpl"/>
<!--autowire属性:开启自动装配,通常使用按类型装配-->
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"
autowire="byType"/>
</beans>
<?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">
<bean class="com.itheima.dao.impl.BookDaoImpl"/>
<!--autowire属性:开启自动装配,通常使用按类型装配-->
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"
autowire="byName"/>
</beans>

5.4 集合注入
5.4.1 环境准备
public interface BookDao {
public void save();
}
public class BookDaoImpl implements BookDao {
public class BookDaoImpl implements BookDao {
private int[] array;
private List<String> list;
private Set<String> set;
private Map<String,String> map;
private Properties properties;
public void save() {
20 System.out.println("book dao save ...");
21
22 System.out.println("遍历数组:" + Arrays.toString(array));
23
24 System.out.println("遍历List" + list);
25
26 System.out.println("遍历Set" + set);
27
28 System.out.println("遍历Map" + map);
29
30 System.out.println("遍历Properties" + properties);
31 }
32 //setter....方法省略,自己使用工具生成
33 }
<?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"
4 xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
5
6 <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
7 </beans>
public class AppForDICollection {
2 public static void main( String[] args ) {
3 ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");
4 BookDao bookDao = (BookDao) ctx.getBean("bookDao");
5 bookDao.save();
6 }
7 }
<?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">
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
</bean>
</beans>
5.4.2 注入数组类型数据
<property name="array">
<array>
<value>100</value>
<value>200</value>
<value>300</value>
</array>
</property>
5.4.3 注入List类型数据
<property name="list">
<list>
<value>itcast</value>
<value>itheima</value>
<value>boxuegu</value>
<value>chuanzhihui</value>
</list>
</property>
5.4.4 注入Set类型数据
<property name="set">
<set>
<value>itcast</value>
<value>itheima</value>
<value>boxuegu</value>
<value>boxuegu</value>
</set>
</property>
5.4.5 注入Map类型数据
<property name="map">
<map>
<entry key="country" value="china"/>
<entry key="province" value="henan"/>
<entry key="city" value="kaifeng"/>
</map>
</property>
5.4.6 注入Properties类型数据
<property name="properties">
<props>
<prop key="country">china</prop>
<prop key="province">henan</prop>
<prop key="city">kaifeng</prop>
</props>
</property>
更多推荐
所有评论(0)