spring 之(IOC)入门(xml配置文件)(01)
来源:互联网 发布:化妆软件哪个好 编辑:程序博客网 时间:2024/05/22 00:34
IOC
概述:spring的核心之一
控制反转:就是将bean的创建权交给spring容器管理.解决高耦合性问题
底层:配置文件+反射+工厂模式
入门案例:
步骤:
1.下载spring
去官网下就可以了 https://spring.io/
2.新建一个项目
导入jar:核心jar包
spring解压目录下:core,beans,context,expression
spring日志(spring的依赖包):
org.apache.log4j
org.apache.commons.logging
3.编写配置文件
名称:自定义 建议:applicationContext.xml 位置:自定义 建议:放在src下 导入约束:去文件中spring-framework-4.2.4.RELEASE/docs/spring-framework-reference/html/xsd-configuration.html中找
<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"></beans>
4.编写接口和类 UserDao和UserDaoImpl
public class UserDaoImpl implements UserDao { @Override public void save() { System.out.println("userDao中的save方法执行了!!"); }}
5.在配置文件配置bean
<!-- 配置bean: id:就是给bean起个名字,项目中唯一 class:具体类的全限定名 --> <bean id="userDao" class="com.xx.a_hello.UserDaoImpl"></bean>
6.测试代码
//获取工厂类 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //获取bean UserDao userDao = (UserDao) context.getBean("userDao");
api:bean工厂类
BeanFactory:接口
★ApplicationContext:接口 是BeanFactory的子接口
主要区别:
子接口具有更多的方法
bean的初始化时机不同.
BeanFactory中的bean是在调用getBean方法的时候完成初始化
ApplicationContext中的bean一般是在工厂类初始化的时候完成初始化(多例的不是)
ApplicationContext接口的实现类
ClassPathXmlApplicationContext:从类路径下加载配置文件
FileSystemXmlApplicationContext:从磁盘路径下加载配置文件
spring容器认为是一个map:key是bean的id value是:bean对象
配置文件提示
配置文件中的bean标签配置:
bean的属性
id:就是给bean起个名字,项目中唯一,不能出现特殊符号
class:具体类的全限定名
scope:声明bean的作用范围
常用值:
singleton:单例 默认值
prototype:多例 (action是多实例的)
了解的属性:
init-method:spring容器初始化bean的时候要调用的方法
destroy-method:spring容器销毁bean的时候要调用的方法(只能bean是单例的时候才可以调用)
bean的实例化方式
方式1:无参构造器方式
<bean id="" class=""/>
(了解)方式2:静态工厂实例化
需要创建一个产生指定bean工厂类
在类中提供一个静态获取bean的方法
在配置文件中配置工厂和方法即可
<bean id="" class="工厂的全限定名" factory-method="静态方法的名称">
<!-- 静态工厂实例化 --> <bean id="user2" class="com.itheima.c_instance.User2Factory" factory-method="createUser2"></bean>
(了解)方式3:实例工厂实例化
需要创建一个产生指定bean工厂类
在类中提供一个方法获取bean的方法
先配置工厂类(先实例化工厂)
在配置需要的bean对象(再实例化bean对象)
<!-- 配置工厂类 --> <bean id="user3factory" class="com.itheima.c_instance.User3Factory"></bean> <!-- 配置bean对象 --> <bean id="user3" factory-bean="user3factory" factory-method="createUser3"></bean>
DI:依赖注入
ioc的一个核心,在spring创建bean对象的时候,将bean的属性给设置进去.
依赖注入方式:★
方式1:构造器注入(理解)
通过bean标签的construct-arg子标签注入
constructor-arg:
name属性:构造器参数的名称
value属性:设置参数值(类型为基本类型和String类型)
ref属性:设置参数值(bean类型)
例如:
<!-- 注入方式1:构造器注入 constructor-arg: name属性:构造器参数的名称 value属性:设置参数值(类型为基本类型和String类型) ref属性:设置参数值(bean类型) --> <bean id="bus1" class="com.itheima.e_di.Bus1"> <constructor-arg name="brand" value="byd"/> <constructor-arg name="price" value="5000000"/> </bean>
方式2:属性注入★★
前提:bean中需要有属性(set和get方法)
通过bean标签的property标签:
name属性:构造器参数的名称
value属性:设置参数值(类型为基本类型和String类型)
ref属性:设置参数值(bean类型)子标签注入
<!-- 方式2:属性注入 property标签: name属性:构造器参数的名称 value属性:设置参数值(类型为基本类型和String类型) ref属性:设置参数值(bean类型) bean的id或者name属性值 --> <bean id="bus2" class="com.xx.e_di.Bus2"> <property name="brand" value="金龙"/> <property name="price" value="700000"></property> </bean> <bean id="person" class="com.xx.e_di.Person"> <property name="name" value="小青"/> <property name="bus" ref="bus2"></property> </bean>
方式3:p名称空间注入(有可能见到,底层也是属性注入)
在约束文件导入p名称空间
xmlns:p=”http://www.springframework.org/schema/p”
注入属性的时候直接通过bean标签就可以完成
<bean id="" class="" p:属性名="值" p:属性名2-ref="值"/>
<!-- 方式3:p名称空间方式注入 --> <bean id="person" class="com.itheima.e_di.Person" p:name="小花" p:bus-ref="bus2"></bean>
方式4:复杂类型注入
list和数组 使用list标签 <list> <value>ss</value> </list> map 使用map标签 <map> <entry key="" value=""/> </map> properties 使用props标签 <props> <prop key="">...</prop> </props>
例如:
<bean id="collectionBean" class="com.itheima.e_di.CollectionBean"> <!-- 注入数组 --> <property name="ss"> <list> <value>aa</value> <value>bb</value> <value>cc</value> </list> </property> <!-- 注入list --> <property name="ll"> <list> <value>11</value> <value>22</value> <value>33</value> </list> </property> <!-- 注入map --> <property name="mm"> <map> <!-- key:键名 基本类型或string value:值 基本类型或string key-ref:键名 bean类型 value-ref:值 bean类型 --> <entry key="aa" value="11"></entry> <entry key="bb" value="22"></entry> <entry key="cc" value-ref="bus2"></entry> </map> </property> <!-- 注入properties --> <property name="pp"> <props> <prop key="username">root</prop> <prop key="password">1234</prop> </props> </property> </bean>
导入其他的spring配置文件★★
<import resource="applicationContext2.xml"/>
- spring 之(IOC)入门(xml配置文件)(01)
- Spring入门之IOC
- Spring IOC之XML配置
- Spring入门篇之IOC
- spring入门之IOC容器
- Spring入门之IOC,AOP
- Spring IOC 源码分析-xml配置文件加载-注册
- Spring IOC配置文件
- Spring基础入门之Ioc、DI、AOP
- Spring之IOC快速入门(一)
- spring注解入门之IOC,DI
- Spring入门(三)之IoC
- Spring入门(三)之IoC
- Spring配置文件applicationContext.xml快速入门
- Spring 基于XML配置的IOC入门案例
- Spring之Ioc详解01
- Spring IOC XML Configuration
- Spring IOC XML Annotation
- Zookeeper来由
- 【HDU3853】LOOPS
- Python数据分析学习笔记(二)
- Event Loop
- android_数据交互
- spring 之(IOC)入门(xml配置文件)(01)
- maven项目打包到tomcat lib包为空
- Unity4.x 天空盒子升级5.x显示混乱
- ArrayList和LinkedList增删数据对比
- Windows APC机制 & 可警告alertable的线程等待状态
- 12 在ZStack里实现uart数据接收功能
- C#文件加密和解密
- 补间动画
- 机器学习基石 6.4 A Pictorial Proof