Spring(一)

Spring的优点
方便解耦,简化开发
”Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理
AOP编程的支持
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程
方便程序的测试
Spring对Junit4支持,可以通过注解方便的测试Spring程序
方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
降低JavaEE API的使用难度
Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低。
Spring中的IOC
在这里插入图片描述
IOC:Inversion of Control 控制反转. 指的是 对象的创建权反转(交给)给Spring.
作用是实现了程序的解耦合。
Spring的开发流程
1.官网下载Spring开发包
(Spring目录结构:)

  • docs :API和开发规范.
  • libs :jar包和源码.
  • schema :约束.

2.创建Web项目,引入Spring开发包 Spring架构图
Spring
Spring 的核心组件及详解 (一)(二)
在这里插入图片描述
3.引入相关配置文件:log4j.properties(放在src文件夹中)和applicationContext.xml(存放位置

log4j.properties
applicationContext.xml
引入约束:
spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html

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

4.编写相关类
5.完成配置:

<!-- Spring的入门案例================ -->
<bean id="userDao" class="cn.itcast.spring.demo1.UserDaoImpl"></bean>

6.编写测试程序:

@Test
// Spring的方式:
public void demo2(){
	// 创建Spring的工厂类:
	ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
	// 通过工厂解析XML获取Bean的实例.
	UserDao userDao = (UserDao) applicationContext.getBean("userDao");
	userDao.sayHello();
}

Spring的分配置文件的开发
一种:创建工厂的时候加载多个配置文件:
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(“applicationContext.xml”,“applicationContext2.xml”);

二种:在一个配置文件中包含另一个配置文件:

<import resource="applicationContext2.xml"></import>

IOC和DI:
IOC :控制反转,将对象的创建权交给了Spring.
DI :Dependency Injection 依赖注入.需要有IOC的环境,Spring创建这个类的过程中,Spring将类的依赖的属性设置进去.
Sprin的核心组件
Spring中的工厂
ApplicationContext:
ApplicatioContext接口有两个实现类:
在这里插入图片描述
ClassPathXmlApplicationContext :加载类路径下Spring的配置文件.
FileSystemXmlApplicationContext :加载本地磁盘下Spring的配置文件.

BeanFactory:
在这里插入图片描述
BeanFactory和ApplicationContext的区别:
BeanFactory :是在getBean的时候才会生成类的实例.
ApplicationContext :在加载applicationContext.xml时候就会创建.
Spring的相关配置:
id属性和name属性标签的配置
id :Bean起个名字. 在约束中采用ID的约束:唯一. 必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号 id:不能出现特殊字符.
class:所要加载类的全路径名

<bean id="userService" class="com.itheima.demo2.UserServiceImpl">
   		<property name="name" value="小凤"/>
   	</bean>

name:Bean起个名字. 没有采用ID的约束. name:出现特殊字符.如果没有id的话 , name可以当做id使用.
整合struts1的时候:
<bean name=”/loginAction” >

scope属性:Bean的作用范围.

  • singleton :默认值,单例的.
  • prototype :多例的.
    (单例和多例区别)
  • request :WEB项目中,Spring创建一个Bean的对象,将对象存入到request域中.
  • session :WEB项目中,Spring创建一个Bean的对象,将对象存入到session域中.
  • globalSession :WEB项目中,应用在Porlet环境.如果没有Porlet环境那么globalSession相当于session.

Bean的生命周期的配置:
通过配置标签上的init-method作为Bean的初始化的时候执行的方法,配置destroy-method作为Bean的销毁的时候执行的方法。
销毁方法想要执行,需要是单例创建的Bean而且在工厂关闭的时候,Bean才会被销毁.

Spring的Bean的属性注入:
【构造方法的方式注入属性】

<!-- 第一种:构造方法的方式 -->
	<bean id="car" class="cn.itcast.spring.demo4.Car">
		<constructor-arg name="name" value="保时捷"/>
		<constructor-arg name="price" value="1000000"/>
	</bean>

【set方法的方式注入属性】

<!-- 第二种:set方法的方式 -->
<bean id="car2" class="cn.itcast.spring.demo4.Car2">
	<property name="name" value="奇瑞QQ"/>
	<property name="price" value="40000"/>
</bean>

对象类型的注入:

<!-- 注入对象类型的属性 -->
<bean id="person" class="cn.itcast.spring.demo4.Person">
	<property name="name" value="会希"/>
	<!-- ref属性:引用另一个bean的id或name -->
	<property name="car2" ref="car2"/>
</bean>

1.2.6.3名称空间p的属性注入的方式:Spring2.x版本后提供的方式.

第一步:引入p名称空间
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

第二步:使用p名称空间.
    * 普通属性:    		p:属性名称=””
    * 对象类型属性:	p:属性名称-ref=””

<!-- p名称空间的属性注入的方式 -->
	<bean id="car2" class="cn.itcast.spring.demo4.Car2" p:name="宝马7" p:price="1200000"/>
<bean id="person" class="cn.itcast.spring.demo4.Person" p:name="思聪" p:car2-ref="car2"/>

SpEL的方式的属性注入:Spring3.x版本后提供的方式.

SpEL:Spring Expression Language.
语法:#{ SpEL }

	<!-- SpEL的注入的方式 -->
	<bean id="car2" class="cn.itcast.spring.demo4.Car2">
		<property name="name" value="#{'奔驰'}"/>
		<property name="price" value="#{800000}"/>
	</bean>

    <bean id="person" class="cn.itcast.spring.demo4.Person">
    	<property name="name" value="#{'冠希'}"/>
    	<property name="car2" value="#{car2}"/>
    </bean>

	<bean id="carInfo" class="cn.itcast.spring.demo4.CarInfo"></bean>
	
 	引用了另一个类的属性
	<bean id="car2" class="cn.itcast.spring.demo4.Car2">
<!-- 		<property name="name" value="#{'奔驰'}"/> -->
		<property name="name" value="#{carInfo.carName}"/>
		<property name="price" value="#{carInfo.calculatePrice()}"/>
	</bean>

注入复杂类型:

<!-- Spring的复杂类型的注入===================== -->
	<bean id="collectionBean" class="cn.itcast.spring.demo5.CollectionBean">
		<!-- 数组类型的属性 -->
		<property name="arrs">
			<list>
				<value>会希</value>
				<value>冠希</value>
				<value>天一</value>
			</list>
		</property>
		
		<!-- 注入List集合的数据 -->
		<property name="list">
			<list>
				<value>芙蓉</value>
				<value>如花</value>
				<value>凤姐</value>
			</list>
		</property>
		
		<!-- 注入Map集合 -->
		<property name="map">
			<map>
				<entry key="aaa" value="111"/>
				<entry key="bbb" value="222"/>
				<entry key="ccc" value="333"/>
			</map>
		</property>
		
		<!-- Properties的注入 -->
		<property name="properties">
			<props>
				<prop key="username">root</prop>
				<prop key="password">123</prop>
			</props>
		</property>
	</bean>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值