Spring技术是JavaEE开发必备技能,企业开发技术选型命中率>90%
- 学习spring是为了什么:
简化开发,降低企业级开发的复杂性
框架整合,高效整合其他技术,提高企业级应用开发与运行效率
其中,SpringFramework是学习spring框架的基础,因此,SpringFramework的体系框架图如下:

使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。通俗的讲就是“将new对象的权利交给Spring,我们从Spring中获取对象使用即可”
Spring提供了一个容器,称为IOC容器,用来充当IoC思想中的“外部”
IOC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为Bean
在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入
在dao层创建一个BookDao的接口
- package com.lcyy.dao;
-
- public interface BookDao {
- void save();
- }

- package com.lcyy.pojo;
-
- import com.lcyy.dao.BookDao;
-
- public class BookDaoimpl implements BookDao {
- @Override
- public void save() {
- System.out.println("这是我的第一个spring案例语句");
- }
- }

- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-contextartifactId>
- <version>5.3.31version>
- dependency>

在resource中建立spring的核心配置文件springContext.xml
- "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.lcyy.pojo.BookDaoimpl">bean>

注意:
bean标签:表示配置bean
id属性:表示给bean起名字
class属性:表示给bean定义类型
- import com.lcyy.dao.BookDao;
- import com.lcyy.dao.BookService;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- public class App {
- public static void main(String[] args) {
- //初始IOC化容器
- ApplicationContext ctx = new ClassPathXmlApplicationContext("springContext.xml");
-
- //获取资源BookDao中的
- BookDao bookdao = (BookDao) ctx.getBean("bookdao");
- bookdao.save();
- }
- }
可以看出,我们没有new去创建对象,而是去获取ioc容器,交给ioc容器去创建对象,再通过容器去获取对象。



注意:别名配置name属性可以有多个,用空格,分号,逗号隔开

scope的取值不仅仅只有singleton和prototype,还有request、session、application、 websocket ,表示创建出的对象放置在web容器(tomcat)对应的位置。比如:request表示保存到request域中 。
在我们的实际开发当中,绝大部分的Bean是单例的,也就是说绝大部分Bean不需要配置scope属性。
有三种方法可以实例化bean
在第四步的spring的简单实现中,我们就是通过无参构造器实例化了bean
<1>首先我们建立一个Factory的包,在包下建立一个类

<2>在类中书写以下代码
- package com.lcyy.Factory;
-
- import com.lcyy.dao.BookDao;
- import com.lcyy.pojo.BookDaoimpl;
-
- /**
- * TODO:静态工厂实例化Bean
- */
- public class StaticBookFactory {
- public static BookDao getBookDao(){
- System.out.println("静态工厂创建对象");
- return new BookDaoimpl();
- }
- }
<3>在springContext.xml配置bean
-
- <bean id="bookDao" class="com.lcyy.Factory.StaticBookFactory" factory-method="getBookDao">bean>
<1>在Factory包下创建BookdDaoFactory
- package com.lcyy.Factory;
-
- import com.lcyy.dao.BookDao;
- import com.lcyy.pojo.BookDaoimpl;
-
- /**
- * TODO:实例化工厂
- */
- public class BookDaoFactory {
- public BookDao getBookDao(){
- System.out.println("实例化工厂创建对象");
- return new BookDaoimpl();
- }
- }
<2> 在springContext.xml配置bean
-
- <bean id="bookDao" class="com.lcyy.Factory.BookDaoFactory">bean>
- <bean id="userdao" factory-method="getBookDao" factory-bean="bookDao">bean>
<1>:生命周期:从创建到消亡的整个过程
<2>:代码演示
提供生命周期的控制方法
- 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...");
- }
- }
配置springcontext.xml
- <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"/>
测试类
- public class AppForLifeCycle {
- public static void main( String[] args ) {
- //此处需要使用实现类类型,接口类型没有close方法
- ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("springContext.xml");
- BookDao bookDao = (BookDao) ctx.getBean("bookDao");
- bookDao.save();
- //关闭容器,执行销毁的方法
- ctx.close();
- }
- }
注意:此时要手动关闭资源
<1>在dao层下创建一个BookService接口
- package com.lcyy.dao;
-
- public interface BookService {
- void save();
- }
<2>在pojo包下创建一个实现类
- package com.lcyy.pojo;
-
- import com.lcyy.dao.BookDao;
- import com.lcyy.dao.BookService;
-
- public class BookServiceimpl implements BookService {
- private BookDao bookDao;
-
- @Override
- public void save() {
- this.bookDao.save();
- System.out.println("这是使用set注入的方式");
- }
-
- }
<3> 在springContext.xml配置bean
- <bean id="bookdao" class="com.lcyy.pojo.BookDaoimpl">bean>
-
- <bean id="bookservice" class="com.lcyy.pojo.BookServiceimpl">
- <property name="bookDao" ref="bookdao"/>
- bean>
注意:
中的ref 属性对应的是id="bookdao"的实现类
<1>在pojo包下创建一个实现类
- package com.lcyy.pojo;
-
- import com.lcyy.dao.BookDao;
- import com.lcyy.dao.BookService;
-
- public class BookServiceimpl implements BookService {
- private BookDao bookDao;
-
- public void setBookDao(BookDao bookDao){
- System.out.println("这是构造方法注入的方式");
- this.bookDao = bookDao;
- }
- }
<2>在springContext.xml配置bean
- <bean id="bookdao" class="com.lcyy.pojo.BookDaoimpl">bean>
- <bean id="bookservice" class="com.lcyy.pojo.BookServiceimpl">
- <constructor-arg value="bookDao"/>
- bean>
注意: constructor-arg标签下的value对用的是BookServiceimpl类中setBookdDao中的参数
- <property name="array">
- <array>
- <value>100value>
- <value>200value>
- <value>300value>
- array>
- property>
- <property name="list">
- <list>
- <value>itcastvalue>
- <value>itheimavalue>
- <value>boxueguvalue>
- <value>chuanzhihuivalue>
- list>
- property>
- <property name="set">
- <set>
- <value>itcastvalue>
- <value>itheimavalue>
- <value>boxueguvalue>
- <value>boxueguvalue>
- set>
- property>
- <property name="map">
- <map>
- <entry key="country" value="china"/>
- <entry key="province" value="henan"/>
- <entry key="city" value="kaifeng"/>
- map>
- property>
- <property name="properties">
- <props>
- <prop key="country">chinaprop>
- <prop key="province">henanprop>
- <prop key="city">kaifengprop>
- props>
- property>
注意:property标签表示setter方式注入,构造方式注入constructor-arg标签内部也可以写
、 、
、
依赖自动装配,使用属性autowire
- <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
- <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl" autowire="byType"/>
注意:
自动装配用于引用类型依赖注入,不能对简单类型进行操作
使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用
使用按名称装配时(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用
自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效
以上是学习spring的一些基本概念和使用方法,希望对读者能有所帮助,下期我将继续更新有关spring的相关知识。