zoukankan      html  css  js  c++  java
  • spring_01介绍,搭建,概念,以及配置和属性注入

    介绍

    是一个贯穿整个项目的管理对象的容器

    一站式框架

    1.正是因为spring框架性质是属于容器的性质,容器中装什么对象就有什么功能所以
    是一站式框架。

    2.不仅不排斥其它框架,还能帮其它框架管理对象

    3.aop支持

    4.ioc思想 控制反转(Inversion of Control)

    	把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专用术语。
    	
    	包括
    		依赖注入(Dependency Injection,简称DI)
    	和
    		依赖查找(Dependency Lookup)。
    
    	IoC可以认为是一种全新的【设计模式】,但是理论和时间成熟相对较晚,
    
    	并没有包含在GoF中(java的23种设计模式)。
    

    5.spring jdbc

    6.aop事物

    7.junit测试支持


    搭建

    1.导包

    	最基础的4个核心包
    
    		beans 
    
    		context 
    
    		core 
    
    		expression
    
    
    	spring 使用的是Apache的日志包
    
    		com.springsource.org.apache.commons.logging-1.1.1.jar
    
    		老版本中,还需要:
    
    		com.springsource.org.apache.log4j-1.2.15.jar	
    

    2.创建类

    3.创建xml配置文件 注册对象到容器

    	3.1文件位置任意 (建议src目录下)
    	
    	3.2文件名任意建议applicationContext.xml
    	
    	3.3约束引入
    
    		preferences=》xml=》xml catalog =》 add =》File System =》
    
    		spring=》 schema =》 beans =》 .xsd
    
    		key type: Schema location
    
    		key:加 / + .xsd
    
    
    		<beans><beans/>
    		
    		Design  右键Edit =》 add  =》 xsi =》将自己添加的.xsd引入
    

    4.注册对象到容器

    	<!-- 将User对象交给spring容器管理 -->
    
    	<bean name="user" class="org.spring.domain.User"></bean>
    

    5.测试

    	@Test
    	public void test(){
    
    		//1)获取容器
    		ConfigurableApplicationContext cac = 
    			new ClassPathXmlApplicationContext("applicationContext");
    		//2)向容器“要”对象
    		User user = (User)cac.getBean("user");
    		//3)使用获取过来的对象 
    		System.out.println(user);
    		//4)释放资源 关闭容器
    		cac.close();
    	
    	}	
    

    概念

    1.思想 IOC

    	di 依赖注入
    
    		注入方式: 构造方法 ,set方法注入,字段注入(不推荐)
    
    		注入类型: 基本类型 引用类型
    

    2.BeanFactory & ApplicationContext

    	BeanFactory
    
    		spring的原始接口,针对原始接口实现类实现的功能较为单一
    
    		特点:每次获取对象的时候才创建对象(原因:当时的系统资源较小)
    
    	ApplicationContext
    
    		特点:每次容器启动时就会创建容器中配置的所有对象
    
    		提供了更多的功能
    

    spring配置详解

    1.bean 标签属性配置

    id: 过去的方式 不可以重名,不可以有特殊符号
    name:可以重名,可以有特殊符号,不推荐重名,没意义
    class:包名.类名
    

    2.三种对象创建方式

    无参构造方法
    静态工厂
    手动创建,交给spring容器管理

            package org.spring.domain;
    
            public class UserFactory {
    
                public static User createUser(){
    	            System.out.println("静态工厂创建对象");
    	            return new User();
                }
            }
    
            <bean name="user" class="org.spring.domain.UserFactory" factory-method="createUser"></bean>  
    

    实例工厂
    类似静态工厂 (只是将public去掉然后在applicationContext.xml中配置:)

            <bean name="user1" class="org.spring.domain.UserFactory" factory-bean="userFactory" factory-method="createUser"></bean>
        <bean name="userFactory" class="org.spring.domain.UserFactory"></bean>
    

    3.scope属性

    singleton(默认值):单例对象,被标识为单例的对象在spring容器中只会存在一个实例
    
    prototyp:多例原型,被标识为多例的对象,每次在获得才会创建对象,每次创建的都是新对象
    
    request:web环境下,与request的生命周期一致
    
    session:web环境下,与session的生命周期一致
    

    4.生命周期方法

    init-method:出生方法,构造方法后调用
    
    destory-method:销毁方法,容器关闭前调用
    

    5.spring的模块化配置

    所有的对象配置在一个配置文件中太多了,模块化配置:
    
    在主配置文件中引入其他spring的配置文件:
    
    <import resource="包名.文件名"/>
    

    6.srping属性注入

    set方法注入
    	
    	值类型属性:
    	<bean id="emp" class="org.spring.domain.Employee">
    		<property name="id" value="1"></property>
    		<property name="name" value="张三"></property>
    		<property name="sex" value="男"></property>
    	</bean>
    
    	对象属性:
    		ref=""  其他bean的name
    	
    
    构造函数注入
    	
    	name属性:构造函数的参数名
    	
        	index属性:构造函数的参数索引
    
    	type属性:构造函数的参数类型
    	
    	<bean name="" class="">
    		<constructor-arg name="" value="" />
    		<constructor-arg name="" ref="" />
    	</bean>
    
    	<bean name="" class="">
    		<constructor-arg index="0" value="" />
    		<constructor-arg index="1" ref="" />
    	</bean>
    
    	<bean name="" class="">
    		<constructor-arg type="java.lang.String" value="小白" />
    		<constructor-arg type="org.spring.Status" ref="mystatus" />
    	</bean>
    
    p名称空间注入
    
    	1.导入p名称空间 xmlns:p="http://www.springframework.org/schema/p"
    	
    	2.使用p:属性完成注入
    
    		|-值类型:p:属性名="值"
    
    		|-对象类型:p:属性名-ref="bean名称"
    
    	<bean name="emp" class="org.spring.Employee" 
    
    		p:name="jack" p:age="20" p:dept-ref="admin" >
    
    	说明:p名称空间注入,走的还是set方法
    		
    
    spel注入
    
    	spring expression language 
    
    	spel表达式 模仿el ognl表达式 如引用其他对象的值:
    
    	<bean id="emp" class="org.spring.domain.Employee">
    		<property name="id" value="#{user.id}"></property>
    		<property name="name" value="#{user.name}"></property>
    	</bean>
    
    	但是引用类型不可以使用spel表达式
    

    7.复杂类型注入

    array:
    	<property name="array">
    		<array>
    			<value>123</value>
    			<value>456</value>
    			<ref bean="user" />
    		</array>
    	</property>
    
    
    list:
    
    	<property name="list">
    		<list>
    			<value>123</value>
    			<value>456</value>
    			<ref bean="user" />
    		</list>
    	</property>
    map: 
    	<property name="maps">
    		<map>
    			<entry key="id" value="10086"></entry>
    			<entry key="name" value-ref="user"></entry>
    		</map>
    	    </property>
    set:
    	<property name="sets">
    		<set>
    			<value>123</value>
    			<value>456</value>
    			<ref bean="user" />
    		</set>
    	</property>
    properties:
    	<property name="prop">
    		<props>
    			<prop key="driverClassName">com.mysql.jdbc.Driver</prop>
    			<prop key="url">jdbc:mysql://localhost:3306/mybatis</prop>
    			<prop key="username">root</prop>
    			<prop key="password">123456</prop>
    		</props>
    	</property>
  • 相关阅读:
    函数的有用信息,装饰器 day12
    函数名、闭包、装饰器 day11
    函数的动态参数与命名空间 day10
    函数 day9
    集合 day8
    文件操作 day8
    基础数据类型补充,及capy daty7
    day7 回顾
    编码补充 daty 6
    字典的增删改查 daty 5
  • 原文地址:https://www.cnblogs.com/nm666/p/8282945.html
Copyright © 2011-2022 走看看