Spring学习笔记二之IOC(xml实现)
来源:互联网 发布:mac 自动关机命令 编辑:程序博客网 时间:2024/05/29 07:37
今天正式开始学习Spring,Spring主要分为两大块,一个是IOC,一个是AOP,IOC相对于AOP来说比较简单,所以先从IOC学起,实现IOC分为两种方式,一中是通过配置文件,另外一种是通过注解的方式,接下来先用配置文件来实现:
一.Bean的注入类型(三种方式):
1. 通过setter注入:
这种注入方式是最常用的一种,先要在service层中提供dao层的set和get方法:
package com.limitvic.service;import com.limitvic.dao.UserDao;import com.limitvic.dao.impl.UserDaoImpl;import com.limitvic.domain.User;public class UserService {private UserDao userDao;public UserDao getUserDao() {return userDao;}public void setUserDao(UserDao userDao) {this.userDao = userDao;}public void add(User user) throws Exception{userDao.save(user);}}
在beans.xml中:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="u" class="com.limitvic.dao.impl.UserDaoImpl"></bean><bean id="userService" class="com.limitvic.service.UserService"> <property name="userDao" ref="u"/></bean></beans>
2. 通过构造方法注入:
在service层中写一个构造函数:
package com.limitvic.service;import com.limitvic.dao.UserDao;import com.limitvic.dao.impl.UserDaoImpl;import com.limitvic.domain.User;public class UserService {private UserDao userDao; public UserService(UserDao userDao){this.userDao = userDao;}public void add(User user) throws Exception{userDao.save(user);}}
在beans.xml:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="u" class="com.limitvic.dao.impl.UserDaoImpl"></bean><bean id="userService" class="com.limitvic.service.UserService"> <constructor-arg> <ref bean="u"/> </constructor-arg></bean></beans>
3. 接口方法注入:
接口注入很少用到,而且还会增加代码量,所以在这里就不介绍了。
二.简单属性注入:
如何在实现dao的dao.impl中存在属性,可以再beans.xml中直接进行值得注入:
package com.limitvic.dao.impl;import com.limitvic.dao.UserDao;import com.limitvic.domain.User;public class UserDaoImpl implements UserDao{ private int test1; private String test2; public int getTest1() {return test1;}public void setTest1(int test1) {this.test1 = test1;}public String getTest2() {return test2;}public void setTest2(String test2) {this.test2 = test2;}@Overridepublic void save(User user) {// TODO Auto-generated method stubSystem.out.println("已保存"+user.getUsername()+"的用户信息");System.out.println("test1="+test1);System.out.println("test2="+test2);} }
可以在beans.xml中这样子写:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="u" class="com.limitvic.dao.impl.UserDaoImpl"><property name="test1" value="8"></property><property name="test2" value="test2"></property></bean><bean name="userService" class="com.limitvic.service.UserService"> <constructor-arg> <ref bean="u"/> </constructor-arg></bean></beans>
这样子就可以把值直接注入给test1 和test2了。
三.Bean 的范围属性Scope:
其中singleton和prototype较为常用,一个是指单例,另一个指的是原型,而剩下的三个一般在Spring 和其他框架相结合时才会用到,先来看看Scope这个属性到底是做什么用的,Spring中默认的是singleton。
所以可以写这样的代码:
UserServiceuserService = (UserService)factory.getBean("userService");
UserServiceuserService2 = (UserService)factory.getBean("userService");
这样子获得的两个UserService的对象其实是同一个,因为系统内部创建对象时是用单例模式。
但如果在beans.xml中这样子该:
<beanname="userService"class="com.limitvic.service.UserService" scope="prototype">
那么获得这两个UserService 对象才是不一样的,每次创建对象时创造一个新的。
四.自动装配:
这里要用到一个属性叫做autowire, 在bean中一般这样子赋值:
autowire = “byName”或者 autowire = “byType” 再或者autowire = “default”
分别是按照名字自动匹配,按照类型自动匹配,或者按照默认值自动匹配。
这里举个例子:
在beans.xml中:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="userDao1" class="com.limitvic.dao.impl.UserDaoImpl"><property name="id" value="1"></property></bean><bean id="userDao2" class="com.limitvic.dao.impl.UserDaoImpl"><property name="id" value="2"></property></bean><bean name="userService" class="com.limitvic.service.UserService" autowire="byName"></bean></beans>
在service层中:
package com.limitvic.service;import com.limitvic.dao.UserDao;import com.limitvic.dao.impl.UserDaoImpl;import com.limitvic.domain.User;public class UserService {private UserDao userDao1; public void add(User user) throws Exception{userDao1.save(user);}public UserDao getUserDao() {return userDao1;}public void setUserDao(UserDao userDao) {this.userDao1 = userDao;}}
通过autowire这个属性,可以把bean中的userDao1和userDao2自动和service中的userDao1属性进行比对,如果比对成功,可知userDao1比对成功,就将bean中的userDao1注入给service中的userDao1。
如果所有的bean都用同一种装配方式:可以在beans.xml开头写上default-autowire="byName",具体代码如下:
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"default-autowire="byName"
- Spring学习笔记二之IOC(xml实现)
- Spring学习笔记(二)-----IOC之XML
- spring源码学习之路---IOC实现原理(二)
- Spring学习笔记三之IOC(annotation实现)
- Spring学习笔记(二)IOC详解
- Spring IoC学习笔记(二)
- 学习Spring框架笔记之基于xml的IOC配置
- spring 源码学习笔记(一)—— spring ioc 之加载XML转换为BeanDefinition
- spring框架学习笔记(二)——spring的ioc之Resource
- spring 源码学习笔记(二)—— spring ioc 之依赖注入
- Spring 之 IoC 学习笔记
- Spring之IOC(学习笔记)
- Spring 学习笔记之IOC
- Spring学习之路第一步 : xml方式实现IOC(控制反转)
- Spring学习笔记(二)IOC和AOP
- Spring学习笔记(二)IOC注入方式
- Spring学习笔记(二) IoC容器与Bean
- Spring IOC 学习笔记(二) BeanFactory
- 针对在501染毒优盘的杀毒恢复程序
- Linux内核源码分析方法
- 关于span不能设置宽度及span自动换行的解决方法
- android asserts文件读出到 /data/data/pkg/目录下
- SQL优化----如何使用工具快速诊断出统计信息有问题?
- Spring学习笔记二之IOC(xml实现)
- 超酷的Qt消息提示框,仿126邮箱登录提示
- AspxGridview GetSelectedFieldValues取值为主键值
- junit4 概述
- linux-3.6.6移植----基于mini6410
- Toast的基本操作
- 【discuzx3】注意header.htm模板文件中的这几行代码
- Genesis-3D 入门教程—10.粒子系统
- junit4 概述1