Java SSM框架 Spring入门及IOC详解

2 篇文章 0 订阅
2 篇文章 0 订阅
本文详细介绍了Spring框架,重点讲解了IOC(控制反转)的概念和实现方式,包括属性注入、p命名空间注入和构造方法注入。此外,还讨论了在IOC容器中注入的多种方式,如字面值、Bean继承、Bean引用、级联属性配置和集合属性配置。最后,提到了Bean的作用域(singleton和prototype)以及如何在IOC容器中管理数据源,特别是使用C3P0数据库连接池的配置步骤。
摘要由CSDN通过智能技术生成

Java SSM框架 Spring入门及IOC详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 转载联系邮箱:1363119685@qq.com
Copyright © 2018 DAR林克斯 保留所有权利

Java SSM框架 Spring入门及IOC

一、Spring简介:
Spring是一个容器类的框架,Spring体系中拥有Java EE开发的所有需要的模块,但是它也不排斥其它的框架,可以很好地组织和管理其它地框架,使之形成一个统一地整体。
1.IOC:Inversion of Control控制反转,以前我们资源地控制权在Java程序中,而使用spring以后,资源控制权交给spring地IOC容器(applicationContext.xml)。
2.DI:Dependency Injection(依赖注入),资源由原来在Java程序中通过new的方式获取而改成从IOC容器来获取。
3.AOP:Aspect Oriented Programming(面向切面编程),可以将一些可重用的模块通过AOP的编程方式动态的添加/移除,让目标程序增加/去除相应的功能。
二、Spring入门程序(步骤):通过MyEclipse插件的方式完成开发。
MyEclipse中已经集成了spring的插件,使用插件开发可以简化我们开发操作。
1.创建一个web project:spring1_basic
2.通过MyEclipse添加spring的能力:可以自动完成如下三件事情
步骤:项目右键 ==> MyEclipse ==> Project Facets [Capabilities] ==> Install spring facet
1)自动添加Spring需要的jar包:我么可以手动修改为更高的版本。
2)自动创建IOC容器:applicationContext.xml。
3)在web.xml文件中添加一个监听器,加载以上的IOC容器(applicationContext.xml)。
3.在IOC容器(applicationContext.xml)中配置资源,通常使用标签完成配置。

<!-- 配置一个bean:注入Grade实体的两个属性 -->
<bean id="grade" class="com.ssm.entity.Grade" s>
	<property name="gradeId" value="1"></property>
	<property name="gradeName" value="一年级"></property>
</bean>

4.创建项目的包并编写一个测试程序:测试bean注入是否正确。com.ssm.test.GradeTest

public void test1(){
	//1.创建一个加载IOC容器applicationContext的对象;
	ApplicationContext ac = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		
	//2.再通过以上对象调用getBean()方法,从IOC容器中获取bean中的
	Grade grade = ac.getBean(Grade.class);
	logger.debug(grade);
}

三、IOC容器注入的三种方式:
1.通过“属性方式”注入:使用标签完成bean属性的注入。

<!-- 配置一个bean:注入Grade实体的两个属性 -->
<bean id="grade" class="com.ssm.entity.Grade" s>
	<property name="gradeId" value="1"></property>
	<property name="gradeName" value="一年级"></property>
</bean>

2.通过“p命名空间方式”注入:
在标签中,使用“p:名称”来声明属性名和属性值。

@Test
public void test2(){
	//1.创建一个加载IOC容器applicationContext的对象;
	ApplicationContext ac = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		
	//2.再通过以上对象调用getBean()方法,从IOC容器中获取bean中的
	Grade grade = (Grade) ac.getBean("grade2");
	logger.info(grade);
}

3.通过“构造方法的方式”注入:
注意:保存在实体中具有相应的构造方法,否则报错。

<!-- 3.通过“构造方法的方式”注入 -->
<bean id="grade3" class="com.ssm.entity.Grade">
	<constructor-arg name="gradeId" value="3"></constructor-arg>
	<constructor-arg name="gradeName" value="三年级"></constructor-arg>
</bean>

四、在IOC容器中能注入的三种方式:
1.注入“字面值”:
若“字面值”中包含特殊字符(<一年级>)的处理方式:使用CDATA节的来包裹。格式:<![CDATA[<内容>]]>;以<![CDATA[开头,以]]>结尾,含有特殊字符的字符串写在中间。

<bean id="grade41" class="com.ssm.entity.Grade">
	<property name="gradeId" value="41"></property>
	<property name="gradeName">
		<value><![CDATA[<四十一年级>]]></value>
	</property>
</bean>

2.Bean的继承:
在标签中可以使用parent属性来指定当前bean继承哪个父bean的配置,同时可以在单独配置自己的属性覆盖父bean的属性配置。

<bean id="grade42" class="com.ssm.entity.Grade">
	 <property name="gradeId" value="42"></property>
	 <property name="gradeName" value="四十二年级"></property>
</bean>
<bean id="grade42_1" parent="grade42">
	 <property name="gradeName" value="四十二_一年级"></property>
</bean>

3.Bean的引用:
针对已经存在的Bean,可以通过ref属性直接引用,而不用在单独配置。

<bean id="subject43" class="com.ssm.entity.Subject">
	<property name="subjectId" value="43"></property>
	<property name="subjectName" value="spring"></property>
	<property name="classHour" value="40"></property>
	 	
	<property name="grade" ref="grade42_1"></property>
</bean>

4.配置Bean的级联属性:
在多方持有一方的对象时,可以通过“属性.属性名”的方式级联配置1方的属性。

<bean id="subject44" class="com.ssm.entity.Subject">
	 <property name="subjectId" value="44"></property>
	 <property name="subjectName" value="spring"></property>
	 <property name="classHour" value="50"></property>
	 	
	 <!-- 配置级联属性 -->
	 <property name="grade" ref="grade"></property>
	 <property name="grade.gradeId" value="4"></property>
	 <property name="grade.gradeName" value="四年级"></property>
</bean>

5.内部Bean:
在多方持有1方的对象时,可以通过配置“内部Bean”的方式配置1方的属性。
6.Bean中的集合属性配置:
在Bean中提供了针对List、Set、Map的配置,分别可以使用、、完成配置。
五、Bean的范围:
在标签中,可以使用scope的属性指定bean范围(作用域),常用值有:singleton、prototype;
1.singleton:单实例的;该bean时一个单实例的对象,所有访问者都使用同一个对象,出现线程安全的问题。是scope的默认值
2.prototype:多实例的;每一个访问者都会有一个属于自己独立的对象,不会出现线程安全的问题,通常对于控制器层的bean需要将scope设置为“prototype”。

六、在IOC容器中管理“数据源”:
使用C3P0数据库连接池作为“数据源”;
1.“数据源连接池”的概念:
在这里插入图片描述
2.在IOC容器中如何配置“数据源”:
1)加入C3P0数据库连接池的jar包:
2)使用context:property-placeholder标签加载属性文件(其中包含连接数据库的4个参数)。

<context:property-placeholder location="classpath:db.properties"/>

3)使用标签配置class为C3P0数据库连接池的核心类

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	<property name="driverClass" value="${jdbc.driverClass}"></property>
	<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
	<property name="user" value="${jdbc.user}"></property>
	<property name="password" value="${jdbc.password}"></property>
		
	<!-- C3P0数据库连接池中的个性化配置
		intialPoolSize:初始化连接数;
		minPoolSize:最小连接数;
		maxPoolSize:最大连接数。
	-->
	<property name="initialPoolSize" value="10"></property>
	<property name="minPoolSize" value="10"></property>
	<property name="maxPoolSize" value="10"></property>
</bean>

3.测试程序:测试以上“数据源”配置是否正确:

//创建一个log4j对象,通常声明为静态的,main方法中也可以使用。
public static final Logger logger = Logger.getLogger(GradeTest.class);
public static void main(String[] args) {
	//1.创建一个加载IOC容器applicationContext的对象;
	ApplicationContext ac = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
DataSource dataSource = (DataSource) ac.getBean("dataSource");
	logger.info(dataSource);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值