spring学习(一)——Bean管理IOC容器

IOC的概念(个人理解)

  IOC中文也就是控制翻转。控制翻转的标准概念可以网上查找。
  个人通俗点理解,这个词儿所代表的实践行为就是把一对实体对象抽出来进行统一配置管理。
  在生产实践过程中会发现很多高耦合的业务,动了一个就要动另一个,而且如果实际操作的人对业务的理解不透彻和不熟练,会遗漏很多相关联的东西。当企业信息化程度高,多系统关联性更复杂导致负责的人不是同一个的时候,人和人之间沟通的时效性和成本又会产生较高的影响。就单点登录这个实际业务举例,一开始是以某个系统为标准进行管理的。但是在实际实践过程中会发现,理想标准实施起来很难达到,因为作为标准的系统本身也会有特殊应用的场景需要一些骚操作,但是这种骚操作在标准系统内部没有任何影响,却会影响和他相关联的系统。这个时候,就会考虑吧单点登录这一业务抽离出来,另组服务器进行管理配置。
  于是在开发过程中,有了工厂模式,也就是创建工厂类,把所有用到的实体类都放到工厂里进行统一创建和管理。但是即便创建工厂类,也只是缓解了部分问题,实际上代码上的耦合并没有彻底的解决。于是又发展成了控制翻转以追求更好的解决耦合问题。通过配置xml表的方式,将类和类之间的关系抽离出来进行配置管理。在代码中,只要调用这些关系用就ok,而不需要在代码中考虑牵一发而动全身的问题。
  而实现控制翻转的其中一种方式就是依赖注入。也就是说,依赖注入是控制翻转这个思想的一种实现方式。

xml管理方式

  1. 创建对象
package com.nihility.test1;
public Student{
	String name;
	int id;
	String address;
	public Student(String name){
		this.name = name;
	}
	//set方法
	public void setName(String name){
		this.name=name;
	}
	public void setAddress(String address){
		this.address=address;
	}

}

public Teacher{
	String name;
	int id;
	public Teacher(String name){
		this.name = name;
	}
	
	public setName(String name){
		this.name = name;
	}

}

新建一个配置文件,比如叫bean.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">
    <!---->
    <!--这里的两条bean标签,就是创建了两个实例。其中id自己命名,class是路径名-->
    <bean id="user" class="com.nihility.test1.User" />
    <bean id="student" class="com.nihility.test1.Student"/>

</beans>

这个时候写个测试类

public TestBean{
	public void Test1(){
		ApplicationContext context = 
			new ClassPathXmlApplicationContext("bean.xml");
		User user = context.getBean("user",User.class);
		Student student = context.getBean("student",Student.class);
	}
}

在这个测试中,这两个类就可以通过这种方式取用了

  1. 给属性赋值赋值 通过set方法注入属性(值)和通过有参构造器注入属性值。
<bean id="user" class="com.nihility.test1.User">
	<!--这里是通过set方法注入的,如果没有set方法就没用-->
	<property name='name' value='张三'></property>
</bean>
<bean id="student" class="com.nihility.test1.Student">
	<!--这里是通过有参构造器注入的,如果没有有参构造器就没用-->
	<constructor-arg name="name" value="李四"></constructor-arg>
<bean>
  1. p名称空间注入和c名称空间注入
    相当于set注入和构造注入的一个简化。把property标签和constructor-arg标签变成了bean标签中的一个属性来赋值
    随便举个例子
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p">
	<!--在这里添加一行p-->
	<!--2、在bean标签进行属性注入(算是set方式注入的简化操作)-->
	<bean id="student" class="com.nihility.test1.Student" p:name="张三"></bean>
</beans>
  1. 注入空值及特殊符号
<bean id="student" class="om.nihility.test1.Student">
	<!--1.null值-->
	<property name="address">
		<null/><!--属性里边添加一个null标签-->
	</property>
	<!--(2)特殊符号赋值-->
	<!--属性值包含特殊符号
		a 把<>进行转义 &lt; &gt;
		b 把带特殊符号内容写到CDATA
	-->
	<property name="address">
		<value><![CDATA[<<南京>>]]></value>
	</property>
</bean>
  1. 注入外部bean 内部bean和级联赋值
    外部bean就是两个独立的bean,一个引用另一个
    内部bean就是一个bean写在另一个bean的内部
    级联赋值就是层层套娃。产生一级一级联动的感觉。
    空了搞点实例出来。
  2. 注入集合类型属性
  3. 工厂bean
    这个等想明白了再写
  4. bean的作用域
  5. bean的声明周期
    1. 实例化
    2. 初始化
    3. 销毁
  6. 自动装配
    自动装配就是自动的去找生成的实例对象然后装进来,有两种寻找的办法分别是byName通过名称来找和byType通过类型来找。
  7. 外部属性文件

注解管理方式

posted @ 2022-06-03 20:12  nihilityfzero  阅读(52)  评论(0编辑  收藏  举报