Spring入门

什么是spring?
Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用 。
spring容器架构图
在这里插入图片描述
什么是控制反转(IOC)或依赖注入(DI)
控制反转:当我们调用一个方法或者类时,不再由我们自己创建类的对象,而是把控制权交给别人.
依赖注入:spring主动创建被调用类的对象,然后把这个对象注入到我们自己的类中,使得我们可以使用它。
总体来说将以前由程序员实例化对象/赋值的工作交给了spring处理
下面我们用简单的利用梳理对比spring的方便与快捷
创建一个UserBiz接口

public interface UserBiz {
	
	//上传文件
	public void upload();

}

创建UserBizImplOne类

public class UserBizImplOne implements UserBiz {

	@Override
	public void upload() {
//		System.out.println("实现图片上传的功能");
//		System.out.println("利用缓存流/缓存区实现上传图片");
		
		System.out.println("实现图片上传的功能");
	}

}

创建UserBizImplTwo类

public class UserBizImplTwo implements UserBiz {

	@Override
	public void upload() {
		System.out.println("利用缓存流/缓存区实现上传图片");
	}

}

创建UserAction类直接调用

public class UserAction {
	//private UserBiz userBiz = new UserBizImplOne();
	 private UserBiz userBiz = new UserBizImplTwo();
	public void upload(){
	this.userBiz.upload();
}

}

创建text类

public class IocTest {
	
	
	@SuppressWarnings("resource")
	public static void main(String[] args) {
//		
		UserAction userAction = new UserAction();
		userAction.upload();

	}

}

通过IOC方式来调用实现类的方法
创建UserBiz接口

/**
 * IOC 特性 反转控制
 * @author Administrator
 *
 */
public interface UserBiz {
	
	//实现图片上传
	public void upload();

}

通过IOC调用

public class UserAction {
	private UserBiz userBiz;

	 public UserBiz getUserBiz() {
		return userBiz;
	}

	public void setUserBiz(UserBiz userBiz) {
		this.userBiz = userBiz;
	}

	public void upload() {

		this.userBiz.upload();
	}

}

创建springbeans

	<!--IOC特性 -->
	<!--bean Class是指javaBean的全限定类名 name 在spring上文中的唯一标识 -->
	<bean class="com.zking.services.biz.UserBizImplOne" name="userBizOne"></bean>
	<bean class="com.zking.services.biz.UserBizImplTwo" name="userBizTwo"></bean>
	<bean class="com.zking.services.web.UserAction" name="userAction">
		<!-- property name是指javaBen的变量 ref 哪个类注入到IOC容器中 -->
    	<property name="userBiz" ref="userBizOne"></property>
	</bean>

创建Test类

public class IocTest {
	
	
	@SuppressWarnings("resource")
	public static void main(String[] args) {	
		
		//获取spring上下文(建模)
		System.out.println("=================IOC特性");
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-context.xml");
		UserAction userAction = (UserAction) applicationContext.getBean("userAction");
		userAction.upload();
	}

}

IOC注入的两种方式
set注入和构造器注入
set注入
创建StudentAction类

public class StudentAction {
	
	private int sid;
	
	private String sname;
	
	private List<String> hobbies;

	public int getSid() {
		return sid;
	}
	
	public void setSid(int sid) {
		this.sid = sid;
	}

	public String getSname() {
		return sname;
	}

	public void setSname(String sname) {
		this.sname = sname;
	}

	public List<String> getHobbies() {
		return hobbies;
	}


	public void setHobbies(List<String> hobbies) {
		this.hobbies = hobbies;
	}
	
	
	public void run() {
		System.out.println(this.sid+"--"+this.sname+"---"+this.hobbies);
	}
}

创建springbeans

<!--IOC注入方式 八大基本数据类型+String+3 
	    java.util.Date
	    java.sql.Date java.sql.Time 
		java.sql.Timestamp 
		通过<value></value>赋值即可 -->
	<bean class="com.zking.services.web.StudentAction" name="stuAction">
	<!--set注入  -->
 		<property name="sid" value="1001"></property>
		<property name="sname" value="张三"></property> 
		<property name="hobbies">
			<list>
				<value>篮球</value>
				<value>足球</value>
				<value>羽毛球</value>
			</list>
		</property>
	</bean>
	

创建test类

//注入方式 set方式 构造器
		System.out.println("================IOC注入方式");
		// Invalid property 'sid' of bean class [com.zking.services.web.StudentAction]: Bean property 'sid' is not writable or has an invalid setter method.
		//Does the parameter type of the setter match the return type of the getter?
		//当属性值没有提供setter 和 getter方法时 会报错 
		//解决方法 : 提供setter and getter方法
		StudentAction studentAction = (StudentAction) applicationContext.getBean("stuAction");
		studentAction.run();

构造器注入:同理 把上面StudentAction类的setter和getter方式去除,提供有参数和无参数构造器
创建springbeans

<bean class="com.zking.services.web.StudentAction" name="stuAction">
		<!-- 构造器注入 -->
	<constructor-arg name="sid" value="1002"></constructor-arg>
	<constructor-arg name="sname" value="李四"></constructor-arg>
		<property name="hobbies">
			<list>
				<value>篮球</value>
				<value>足球</value>
				<value>羽毛球</value>
			</list>
		</property>
	</bean>

测试类如同上set注入的测试列即可’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值