Spring的环境搭建与注入

来源:互联网 发布:软件系统租用合同范本 编辑:程序博客网 时间:2024/06/06 01:37

Spring 的主要功能:IOC、AOP、Spring 关于jdbc的支持、与Junit的整合测试。
Spring的刚开始学习时的小知识点:

环境搭建

  1. 导入包 4个核心包+2个日志包
    这里写图片描述
  2. 写xml配置文件
    默认spring配置文件可以任意起名,但建议写成applicationContext.xml
    默认路径可以是src下的任意路径,但是建议写在src下
  3. xml文件的约束导入

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "></beans>

核心概念


IOC: Inverse of Control 控制反转
之前对象由我们开发人员创建,对象关系由我们维护,现在交由spring容器创建和维护类之间的关系。控制权反转了,这就是IOC。
DI:依赖注入
注入的方式:set方法注入,构造方法,字段注入
注入类型:
基本类型:8大基本数据类型
引用数据类型:对象(包括String)
实现IOC思想的很重要的技术支持。
AOP:面向切面编程(随后讲解的内容)
BeanFactory:
Spring原始接口,该接口实现类的一个特点是每次获取bean时,才会创建对象。
所以占用内存较小,但是速度不快。
ApplicationContext:
每次容器一起动就会创建对象,还有很多其他功能。占用内存较大,但是速度快。
两个实现:
ClassPathXmlApplicationContext 从类路径中加载配置文件
FileSystemXmlApplicationContext 从绝对路径中加载配置文件
ClassPathXmlApplicationContext 常用,但是将来不测试代码的时候,我们其实可以交给web.xml。

Spring配置,包括属性注入(赋值)


1、bean标签
Class: 被管理对象的完整路径
Name:给被管理的对象起个名字,便于获取对象的时候使用。
Id:与name属性一样,但是名字不能重复。建议使用name。
Scope:singleton(默认值) 单例对象
在spring中只创建一个实例化对象
Prototype: 多例原型
在spring中创建多个对象,一般我们不会指定为多例对象,但是如果将来整合structs2整合的时候,需要指定为多例,多例时,web容器启动时,不会创建该对象,每次使用时创建一次,即使用一次创建有一次。
Init-method:
创建一个方法作为生命周期的初始化方法,spring会在创建对象的时候调用该方法。
Destory-method:
创建一个方法作为生命周期的销毁方法,spring会在销毁对象的时候调用该方法。

2、spring容器创建对象及注入

首先创建实例对象,get和set方法就省略了:
public class Admin {
private String name;
private String password;
private Car car;
}
public class beanFactory {
public static Admin getStaticAdmin(){
Admin admin = new Admin();
return admin;
}
public Admin getAdmin(){
Admin admin = new Admin();
return admin;
}
}
public class Car {
private String color;
private String name;
}
public class CollectionDemo {
private List list;
private Map map;
private Properties properties;
private Object[] arr;
}

  1. 空构造方法创建对象

    <bean name="admin" class="com.hui.pojo.Admin" scope="singleton" init-method="initMethod" destroy-method="destroyMethod">
    <!-- 普通成员变量的赋值注入 -->
    <property name="name" value="admin"></property>
    <property name="password" value="123123"></property>
    <!-- 对象类型的成员变量注入 -->
    <property name="car" ref="car"></property>
    </bean>

  2. 有参构造方法创建对象

    <bean name="admin1" class="com.hui.pojo.Admin" >
    <!-- 有参构造方法 -->
    <constructor-arg name="name" value="xiaoming"></constructor-arg>
    <constructor-arg name="password" value="123"></constructor-arg>
    <constructor-arg name="car" ref="car"></constructor-arg>
    </bean>

  3. 静态工厂创建

    <bean name="admin2" class="com.hui.pojo.beanFactory"
    factory-method="getStaticAdmin">
    <property name="name" value="admin"></property>
    <property name="password" value="jnmd1703"></property>
    <property name="car" ref="car"></property>
    </bean>

  4. 实例工厂创建

    <bean name="adminFactory" class="com.hui.pojo.beanFactory"></bean>
    <bean name="admin3" factory-bean="adminFactory" factory-method="getAdmin">
    <property name="name" value="admin"></property>
    <property name="password" value="jnmd1703"></property>
    <property name="car" ref="car"></property>
    </bean>

    car对象
    <bean name="car" class="com.hui.pojo.Car">
    <property name="color" value="骚气红"></property>
    <property name="name" value="自行车"></property>
    </bean>

  5. 可以导入其他配置文件
    <import resource="applicationContext2.xml" />
  6. 复杂类型的注入
    <bean name="collection" class="com.hui.pojo.CollectionDemo">

    <!-- 数组的注入 --> <property name="arr">    <array>        <value>haha</value>        <value>xixi</value>        <value>baga</value>    </array></property><!-- Map的注入 --><property name="map">    <map>        <entry key="url" value="localhost:8080"></entry>        <entry key="username" value="admin"></entry>    </map></property><!-- List注入 --><property name="list">    <list>        <value>html</value>        <value>javascript</value>        <value>css</value>    </list></property><!-- properties注入 --><property name="properties">    <props>        <prop key="username">zhangsan</prop>        <prop key="password">j1n7m0d3</prop>    </props></property>

原创粉丝点击