<span>spring_01介绍,搭建,概念,以及配置和属性注入</span>

介绍

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

一站式框架

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>
全部评论

相关推荐

真tmd的恶心,1.面试开始先说我讲简历讲得不好,要怎样讲怎样讲,先讲背景,再讲技术,然后再讲提升多少多少,一顿说教。2.接着讲项目,我先把背景讲完,开始讲重点,面试官立即打断说讲一下重点,无语。3.接着聊到了项目的对比学习的正样本采样,说我正样本采样是错的,我解释了十几分钟,还是说我错的,我在上一家实习用这个方法能work,并经过市场的检验,并且是顶会论文的复现,再怎么不对也不可能是错的。4.面试官,说都没说面试结束就退出会议,把面试者晾在会议里面,丝毫不尊重面试者难受的点:1.一开始是讲得不好是欣然接受的,毕竟是学习。2.我按照面试官的要求,先讲背景,再讲技术。当我讲完背景再讲技术的时候(甚至已经开始蹦出了几个技术名词),凭什么打断我说讲重点,是不能听出人家重点开始了?这也能理解,每个人都有犯错,我也没放心上。3.我自己做过的项目,我了解得肯定比他多,他这样贬低我做过的项目,说我的工作是错误的,作为一个技术人员,我是完全不能接受的,因此我就和他解释,但无论怎么解释都说我错。凭什么,作为面试官自己不了解相关技术,别人用这个方式work,凭什么还认为这个方法是错的,不接受面试者的解释。4.这个无可厚非,作为面试官,不打招呼就退出会议,把面试者晾着,本身就是有问题。综上所述,我现在不觉得第一第二点也是我的问题,面试官有很大的问题,就是专门恶心人的,总结面试官说教,不尊重面试者,打击面试者,不接受好的面试者,技术一般的守旧固执分子。有这种人部门有这种人怎么发展啊。最后去查了一下,岗位关闭了。也有可能是招到人了来恶心人的,但是也很cs
牛客20646354...:招黑奴啊,算法工程师一天200?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务