Spring学习第二章

开发步骤

1.创建工程:

1)maven工程
2)添加web.xml
3) 导入依赖的jar包
4)配置文件

2.定义类

在cn.tedu.demo包中定义King 

public class King{
}

3.在配置文件中配置bean对象

<!-- 
	1.实例化对象,默认对象为单例模式 
	2.scope属性表示设置bean的作用域
		prototype表示多例模式
		默认值singleton表示单例模式
 -->
	<bean id="king" class="cn.tedu.demo.King" 
	scope="singleton"/>

##4.延迟加载

1.立即加载:默认情况下,当初始化容器对象时,所有的bean对象就会被实例化,这种的加载对象的方式,叫立即加载 。

为什么延迟加载:节省内存

2.实现延迟加载:

<bean id="king1" class="xx.xx.King" 
	lazy-init="true"/> 

##IOC(重点)

IOC:控制反转(Inversion Of Control),原来创建和管理(维护)对象由程序代码完成,现在把创建和管理(维护)对象的权利交给Spring容器管理,我们把控制权的转移叫控制反转。

(创建对象)

注意:bean的生命周期和延迟加载在bean的单例模式下有效

给成员变量赋值(依赖注入DI)**

依赖注入在Spring中提供两种方法:set方法依赖注入和
构造方法依赖注入

##1.set方法依赖注入(推荐使用)

页面-控制器-业务层-持久层

1.定义持久层的接口和实现类

在cn.tedu.dao包中定义接口UserDao,定义5个方法。在实现类UserDaoImpl中实现5个方法。

public interface UserDao{
	void insertUser();
	void updateUser();
	void deleteUserById();
	void selectById();
	void selectAllUser();

}
public UserDaoImpl implements UserDao{
	public void insertUser(){
		System.out.println("添加成功");
	}
	。。。。
}

在cn.tedu.service包,定义接口(UserService),在接口中定义方法;定义接口的实现类,实现接口中的方法

public interface UserSerivce{
	void addUser();
}	
public class UserServiceImpl implements UserService{
private UserDao userDao;
	public void setUserDao(UserDao userDao){
		this.userDao = userDao;
	}
	public void addUser(){
		//调用dao层的方法insertUser()方法
		//userDao.insertUser();
	}
}

在配置文件中配置信息
 <!-- 
	1.实例化业务层的对象
	2.property表示给成员变量赋值(属性赋值)
	3.name表示属性名
	4.ref表示已经创建好的对象的id名
 -->
  <bean id="userDao" class="cn.tedu.dao.UserDaoImpl"/>
  <bean id="userService" 
  		class="cn.tedu.service.UserServiceImpl">
  		<!-- 相当于调用set方法 -->
  		<property name="userDao" ref="userDao"/>
  </bean>

测试:

@Test
public void test3(){
	AbstractApplicationContext ac =
		new ClassPathXmlApplicationContext(
				"application.xml");
	UserService us = 
			ac.getBean("userService",
			UserService.class);
	us.addUser();
	ac.close();
}

##2.构造方法依赖注入

在UserServiceImpl类中添加带参数的构造方法
public UserServiceImpl(){}
public UserServiceImpl(UserDao userDao){
	this.userDao = userDao;
}

<bean id="userDao"  class="cn.tedu.dao.UserDaoImpl"/>
   <!-- 
  	1.constructor-arg表示使用构造方法给成员变量赋值
  	2.index表示构造方法参数的索引(从0开始)
  	3.ref表示已经创建好的对象id
   -->
  <bean id="userService2" 
  		class="cn.tedu.service.UserServiceImpl">
  		<constructor-arg index="0" ref="userDao"/>
  </bean>

##3.自动装配(了解)

byName,byType

<!-- 
  	1.autowire表示自动装配
  	2.byName表示匹配属性名,完成依赖注入
  	(UserServiceImpl中有个属性userDao,byName方式赋值
  		就是去找id="userDao"名字的实例化对象赋值)
   -->
  <bean id="userService3" 
  		class="cn.tedu.service.UserServiceImpl"
  		autowire="byName"/>
<!-- 
  	1.byType表示按属性的类型匹配,实现依赖注入
  	2.如果有两个对象同属于一个类型,那么使用byType会出现异常
   -->
  <bean id="userService4" 
  		class="cn.tedu.service.UserServiceImpl"
  		autowire="byType"/>

##DI:依赖注入(Dependency Injection)
通常情况下,一个类不能完成复杂的业务处理,会有多个类一起合作完成,就会出现一个类中会调用另外一个类的方法,就需要给依赖的对象赋值,所有在程序运行过程中动态给组件(成员变量)赋值,这种方式就叫依赖注入。

#给属性,各种集合赋值

   <bean id="valueBean" 
	 class="cn.tedu.demo.ValueBean">
	 <!-- 
	 	给基本数据类型和字符串赋值使用value属性
	  -->
	<property name="name" value="王影"/>
	<property name="age" value="18"/>
	<property name="like">
		<list>
			<value>旅游</value>
			<value>看电视剧</value>
			<value>听音乐</value>
		</list>
	</property>
	<property name="city">
		<set>
			<value>沈阳</value>
			<value>大连</value>
			<value>鞍山</value>
			<value>抚顺</value>
		</set>
	</property>
	<property name="map">
		<map>
			<entry key="name" value="张志豪"/>
			<entry key="age" value="18"/>
		</map>
	</property>
	<property name="prop">
	<props>
	<prop key="driverClassName">com.mysql.jdbc.Driver</prop>
	<prop key="url">jdbc:mysql://localhost:3306/db</prop>
	<prop key="username">root</prop>
	<prop key="password">root</prop>		
	</props>
	</property>
给集合赋值还可以使用引用对象的方式实现依赖注入

 <bean id="valueBean2" 
	 class="cn.tedu.demo.ValueBean">
	 <property name="like" ref="listLike"/>
</bean>

<util:list id="listLike">
	<value>1111</value>
	<value>2222</value>
</util:list>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值