温室大棚建设 网站及排名转卖,全国互联网安全管理服务平台,东莞seo推广机构帖子,阿里企业邮箱电话目录
SpringIoc创建与使用的大致步骤
一.基于xml配置SpringIoc
二.基于xml配置DI
三.创建IoC容器并获取组件 SpringIoc创建与使用的大致步骤 SpringIoC的创建与使用过程分为3步 1.编写配置信息#xff08;编写XML#xff0c;注解、Java类#xff09;
2.创建IoC容器编写XML注解、Java类
2.创建IoC容器实例化Ioc对象
3.从Java代码中获取组件并使用 一.基于xml配置SpringIoc
实现过程思路 1.配置SpringIoc的jar包依赖 !-- SpringIoc核心jar包 包含core ioc breans 等 --dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.0.2.RELEASE/version/dependency!-- junit5测试 --dependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter-api/artifactIdversion5.3.1/version !-- 使用属性引用JUnit Jupiter版本 --scopetest/scope/dependency
2.编写xml配置文件配置xml相关约束
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd/beans
由于SpringIoc是存放组件的容器而组件内容是可重复使用的对象。在xml中bean标签就是代表着组件
3.三种创建组件的方式
不同的创建组件的方式对应的xml配置也不同。下面介绍三种创建组件的方式无参构造方式创建组件静态工厂创建、非静态工厂创建
1.无参构造方式创建组件 当通过构造函数方法创建一个bean(组件对象) 时所有普通类都可以由 Spring 使用并与之兼容。也就是说正在开发的类不需要实现任何特定的接口或以特定的方式进行编码。只需指定 Bean 类信息就足够了。但是默认情况下我们需要一个默认 (空)构造函数。
无参构造对象代码案例
package com.alphamilk.Ioc;
//无参构造类
public class wucanTemp {public void doWork(){System.out.println(调用无参构造方法doWork函数);}
}对应的xml配置
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd!-- 无参构造方式配置bean 一个组件信息 一个组件对象id组件的唯一标识不可重复class组件通过反射创建所以需要类的权限定符配置完一个组件相当于new了一个wucanTemp对象
--
bean idwucanTemp classcom.alphamilk.Ioc.wucanTemp/
/beans 2.静态工厂创建组件
静态工厂代码
package com.alphamilk.Ioc;//静态工厂代码
public class HelloTemp {private HelloTemp(){}public static HelloTemp getHelloTemp(){HelloTemp temp new HelloTemp();return temp;}
}对应XML配置
!-- 静态工厂的组件配置bean 一个组件信息一个组件对象 一个工厂静态方法id组件的唯一标识class类的权限定符factory-method工厂的静态方法
--bean idhelloTemp classcom.alphamilk.Ioc.HelloTemp factory-methodgetHelloTemp/ 3.非静态工厂创建组件
package com.alphamilk.Ioc;//非静态工厂
public class FactoryNoStatic {private static FactoryNoStatic factoryNoStatic new FactoryNoStatic();public FactoryNoStatic getInstance(){return factoryNoStatic;}
}对应的XML配置
!-- 3非静态工厂配置组件--
!-- 3.1配置工厂类的组件信息--bean idfactoryNoStatic classcom.alphamilk.Ioc.FactoryNoStatic/!-- 3.2通过指定非静态工厂对象和方法名来配置生成的ioc信息--bean idfactoryNoStatic2 factory-beanfactoryNoStatic factory-methodgetInstance/ 二.基于xml配置DI
DI依赖注入有两种实现方式
第一种通过构造函数实现另一种是通过setter实现两种不同的方式实现对应的xml配置也有所不同。下边分别介绍每种的配置。
1.基于构造函数实现对象
基于构造函数的 DI 是通过容器调用具有多个参数的构造函数来完成的每个参数表示一个依赖项下面的示例演示一个只能通过构造函数注入进行依赖项注入的类!
基于单参构造方法
类对象案例
package com.alphamilk.loc2;public class UserDao {
}public class UserService {private UserDao userDao new UserDao();private String name;private int age;// 单参构造方法UserService(UserDao userDao){this.userDao userDao;}
// 多参构造方法UserService(String name,int age,UserDao userDao){this.namename;this.age age;this.userDao userDao;}
}单参构造方法下DI依赖注入的配置
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd!-- 单参数构造方法--
!-- 步骤1将对象都存放在IOc容器中--
bean iduserDao classcom.alphamilk.loc2.UserDao/!-- 构造参数传递di的配置constructor-org 构造参数传值的di配置value直接属性值ref 引用其它的bean组件传入bean的id值
--bean idservice classcom.alphamilk.loc2.UserServiceconstructor-arg refuserDao//bean
/beans
多参情况下DI依赖注入对应xml配置
!-- 基于多参构造方法--
!-- 步骤1将对象存放在Ioc容器中--bean iduserDao classcom.alphamilk.loc2.UserDao/bean idservice classcom.alphamilk.loc2.UserService
!-- 方案1通过使用name对应参数配置【推荐】--constructor-arg nameage value29/constructor-arg namename value黄小龙/constructor-arg nameuserDao refuserDao//beanbean iduserDao classcom.alphamilk.loc2.UserDao/bean idservice classcom.alphamilk.loc2.UserService
!-- 方案2通过顺序的方式传递参数--constructor-arg value黄小龙/constructor-arg value29/constructor-arg refuserDao//beanbean iduserDao classcom.alphamilk.loc2.UserDao/bean idservice classcom.alphamilk.loc2.UserService!-- 方案3通过下角标位置的方式传递参数--constructor-arg index0 value黄小龙/constructor-arg index1 value29/constructor-arg index2 refuserDao//bean
2.基于setter函数实现对象
基于构造函数的 DI 是通过容器调用具有多个参数的构造函数来完成的每个参数表示一个依赖项 下面的示例演示通过构造函数注入多个参数参数包含其他 bean和基本数据类型!
类对象案例
package com.alphamilk.loc3;public class UserDao {
}//setter方式注入
public class UserService {private UserDao userDao new UserDao();private String name;private int age;public void setUserDao(UserDao userDao) {this.userDao userDao;}public void setName(String name) {this.name name;}public void setAge(int age) {this.age age;}
}对应xml配置
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
!--触发 setter方法进行注入--bean iduserDao classcom.alphamilk.loc3.UserDao/
!-- name-》属性名 setter方法的 去掉set并且首字母小写的值 调用set方法名比如setName -》namevalue | ref 进行二选一 value直接属性值 ref 其他bean的id
--bean idservice classcom.alphamilk.loc3.UserServiceproperty nameage value52/property namename value张三/property nameuserDao refuserDao//bean
/beans 三.创建IoC容器并获取组件
1.创建Ioc容器对象
首先类对象
package com.alphamilk.loc4;public class HelloTemp {public void doWork(){System.out.println(HelloTemp is Working);}
}然后进行xml文件配置IoC
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdbean idhelloTemp classcom.alphamilk.loc4.HelloTemp/
/beans 两种实现创建IoC容器对象
package com.alphamilk.Ioc;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {
// 创建SpringIoc容器方法
/*两个接口BeanFactoryApplicationContext四个实现类ClassPathXmlApplicationContext 读取类路径下的xml配置方式WebApplicationContext读取指定文件的xml配置方式FileSystemXmlApplicationContext读取配置类方式的ioc容器AnnotationApplicationContext web项目专属的配置ioc容器*/org.junit.jupiter.api.Testpublic void createIoc(){
// 方式一通过直接创建容器并且指定配置文件即可ApplicationContext applicationContext new ClassPathXmlApplicationContext(Springioc.xml);// 方式二通过先创建ioc容器对象再指定配置文件再刷新ClassPathXmlApplicationContext applicationContext1 new ClassPathXmlApplicationContext();applicationContext1.setConfigLocations(Springioc.xml);applicationContext1.refresh();}
}2.通过创建的容器获取组件
获取组件步骤1.创建ioc容器 2.获取组件
三种获取组件方式 第一种获取bean的方式,通过获取getBean加上bean的id返回Object类型,再将其转为对应的类型。第二种获取bean的方式通过获取bean的同时指定其返回的类型。第三种获取bean方式根据类型获取。 package com.alphamilk.Ioc;import com.alphamilk.loc4.HelloTemp;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {org.junit.jupiter.api.Testpublic void useBean(){// 第一种获取bean的方式,通过获取getBean加上bean的id返回Object类型,再将其转为对应的类型
// 创建Ioc容器ApplicationContext context new ClassPathXmlApplicationContext(springioc.xml);
// 获取组件HelloTemp helloTemp (HelloTemp) context.getBean(helloTemp);// 第二种获取bean的方式通过获取bean的同时指定其返回的类型
// TODO注意可能会出现向下转型异常
// 创建Ioc容器ClassPathXmlApplicationContext applicationContext new ClassPathXmlApplicationContext();applicationContext.setConfigLocation(springioc.xml);applicationContext.refresh();
// 获取组件applicationContext.getBean(helloTemp,HelloTemp.class);// 第三种获取bean方式根据类型获取
// 创建Ioc容器ClassPathXmlApplicationContext classPathXmlApplicationContext2 new ClassPathXmlApplicationContext();classPathXmlApplicationContext2.setConfigLocation(springioc.xml);classPathXmlApplicationContext2.refresh();
// 获取组件
// TODO:注意这种方法有许多条件
// 根据bean类型获取,一次只能有一种类型,举例在ioc容器中如果有多个HelloTemp对象,继续使用这种方法会报错classPathXmlApplicationContext2.getBean(HelloTemp.class);// 注意虽然是三种不同的获取方式,但是获取到的对象都是同一个,三种方法只是对应三种类型的指针指向Ioc容器中存放的组件helloTemp.doWork();}
}基于注解配置
SpringIoC基于注解配置_Alphamilk的博客-CSDN博客