写在前面

很久以前在有道云笔记上写的笔记,打算放弃它了,将笔记迁移到这里来。文章可能还有很多不足,请大家谅解,欢迎大佬提意见。

本文使用到的东西

  1. spring
  2. java

1 spring的概述

因为spring基于反射原理,在使用spring框架的对象类中要存在默认的没有参数的构造函数。

spring 是一个非常著名的实现ioc对象控制反转及aop切面编程的框架。
通常将spring框架作为大型企业项目的“粘合剂”,让大型项目更容易维护(修改和扩展)。

ssh:struts web层, hiberante数据层,spring 中间层。

ioc:inversion of control。编程思想。
控制反转:项目中使用到的对象,不是由程序员自己去创建,而是交由对象工厂创建,程序员用到时才去拿。
用了IOC技术后,屏蔽对象创建的细节,让对象间的装配关系更灵活。

di:dependency injection。依赖式注入是spring对于ioc编程思想的技术实现。
持有抽象,注入实例。

2、spring配置文件头(基于spring4.0库)

<?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:context="http://www.springframework.org/schema/context" 
xmlns:aop="http://www.springframework.org/schema/aop" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xsi:schemaLocation=" 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd 
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd 
">
在这里写配置文件内容
</beans>

3、基础标签及其属性

3.1标签-引入其他配置文件

  1. import标签用于引入其他spring配置文件内容
  2. 该标签放在根beans标签内
  3. 该标签包含一个resource属性,用于写引入的配置文件的位置
    示例:
<beans>
   <import resource="applicationContext_复杂对象.xml"/>
</beans>

3.2标签-配置对象

  1. 该标签用于配置java对象类,放在根beans标签内
  2. id属性:id属性指定该对象的id,在java类中getBean方法可以通过id取得该对象
  3. class属性:指定该bean对应的java对象类
  4. lazy-init属性:是否懒创建,默认false。即创建工厂时就自动创建对象。懒创建为使用时创建
  5. scope属性:表示bean的生命周期,默认为singleton-单例(只创建一次)。
  6. prototype-原型,即用到时new(单例只能懒创建)。request--和request生命周期相同,session-和ssesion生命周期相同。
  7. autowired属性:自动装配属性的值,
  • no ——默认情况下,不自动装配,通过“ref”手动设定属性。
  • byName ——如果配置文件上方匹配到id和对应属性名相同的bean,则自动将该bean装填入属性,如果属性类型无法匹配则会报错。
  • byType ——如果配置文件上方匹配到属性类型与对应属性相同的bean,则自动将该bean装填入属性。如果有多个类型相同的bean则报错。
  • constructor ——根据构造函数参数的数据类型,进行byType模式的自动装配。
  • autodetect ——如果发现默认的构造函数,用constructor模式,否则,用byType模式。

示例1:

--将com.etc.Planejava对象类添加到对象工厂id为prototype的bean,并指定为原型,每new一次都要创建一次
   <!-- 创建1个plane的对象 -->
  	 <bean id="plane" class="com.etc.Plane" scope="prototype"> 
   </bean>

示例2:

--将com.etc.Supermanjava对象类添加到对象工厂id为superman的bean,通过构造方法配置name和age两个属性,其他属性按byName自动获取。
   <!-- todo 创建1个超人 -->
   <bean id="superman" class="com.etc.Superman" autowire="byName">
     <!-- <property name="tool" ref="bird"/> -->  <!-- 设值注入 -->
     <!-- <property name="name" value="老白"/> --> <!-- 设值注入 -->
     <constructor-arg type="java.lang.String" value="老白">      
     </constructor-arg>
      <constructor-arg type="int" value="18">   
     </constructor-arg>
   </bean>

3.3-构造函数

  1. 该标签用于调用java类对象中的构造方法,在对象标签中定义,如果对象类中不存在指定参数的构造方法则将报错
  2. name属性:用于指定对象类中对应的属性名,该标签调用的是对象的构造方法,按理name指的应该是构造方法的参数,不是对象类的属性(未实验)
  3. type属性:在type中填写装箱的数据类型,否则报错,一般可以不用配置
  4. value属性:该属性用于指定name设置的属性对应的值
  5. ref属性:填写其他bean的id,该标签可以引用其他bean做为该name设置的属性对应的值

示例:

      <constructor-arg name="age" type="int" value="18">  
     </constructor-arg>   
     <constructor-arg name="tool" ref="tool">
     </constructor-arg>
  1. 该标签调用的是对象的构造方法,按理name指的应该是构造方法的参数,不是对象类的属性(未实验)
  2. 在配置了type属性之后,如果类型的属性只有一个,可以不用name指定对应的Java类属性

3.4-设置属性的值

  1. 该标签用于调用java类对象中指定属性的set方法,在对象标签中定义,如果对象类中不存在指定的属性则将报错
  2. name属性:用于指定对象类中对应的属性名,不可省略
  3. value属性:该属性用于指定name设置的属性对应的值
  4. 填写其他bean的id,该标签可以引用其他bean做为该name设置的属性对应的值

示例:

<property name="tool" ref="bird"/>
     <property name="name" value="老白"/>

4、在java类中读取使用sprig配置、取得对象

//1 读取applicationContext.xml文件,创建1个对象工厂
      BeanFactory fac = new ClassPathXmlApplicationContext("applicationContext.xml"); 

      //2 使用class类来拿出对象
      //IFly p1_2 = fac.getBean(Plane.class);

      //2 通过id从工厂中拿出对象,指定为IFly.class类型
      IFly p1 = fac.getBean("plane",IFly.class);

      //3 取得的对象可以正常使用
      p1.fly();

5.总结

很久以前在有道云笔记上写的笔记,打算放弃它了,将笔记迁移到这里来。有不清楚的地方欢迎评论留言,看到的我都会回复的。本文到此结束,有什么不足的地方请大家不吝指正。