Spring学习一(spring概念和ioc入门)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35654259/article/details/81913367

 

Spring概念

    Spring是一个开源轻量级框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。

 spring核心主要两部分

(1)aop:面向切面编程,扩展功能不是修改源代码实现

(2)ioc:控制反转,

- 比如有一个类,在类里面有方法(不是静态的方法),调用类里面的方法,创建类的对象,使用对象调用方法,创建类对象的过程,需要new出来对象

- 把对象的创建不是通过new方式实现,而是交给spring配置创建类对象

IOC底层原理

1 ioc底层原理使用技术

(1)xml配置文件

(2)dom4j解决xml

(3)工厂设计模式

(4)反射

2.实现过程

   通过xml实现通过map的键值对放入 键class 值完整的类全名(指向相关联的类),并为其设置   键id 值(随意不过一般是类名) 。

  通过dom解析将得到类全名

 在通过类全名使用反射创建类对象

图片解释 

 IOC入门案例

所需jar包(https://download.csdn.net/download/qq_35654259/10618401

                           

配置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"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context.xsd">
    
  </beans>

在xml文件中配制对象创建

<bean id="user3" class="com.yc.test.bbs.bean.User3">
    
     </bean>

最终的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"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context.xsd">
     
     
     <bean id="user3" class="com.yc.test.bbs.bean.User3">
    
     </bean>
  </beans>

创建所对应的User3.java文件(注意包名必须与配置的class的值一致)

package com.yc.test.bbs.bean;

import java.sql.Timestamp;
import java.util.List;
import java.util.Properties;

/**
 * 用户实体类
 */
public class User3 {

	/**
	 * 用户ID
	 */
	private Integer uid;
	/**
	 * 用戶名
	 */
	private String uname;
	/**
	 * 用户密码
	 */
	private String upass; // 加密后的长度比较长
	/**
	 * 用户头像
	 */
	private String head; // 头像的图片路径
	/**
	 * 注册时间
	 */
	private Timestamp regtime; // 注册时间     Timestamp 带时分秒的日期
	/**
	 * 用户性别:1男,0女
	 */
	private Integer gender; // 性别   1男,0女
	
	/**
	 * 用户发帖集合
	 */
	private List<Topic> topicList;
	private Properties pros;
	
	

	public Properties getPros() {
		return pros;
	}

	public void setPros(Properties pros) {
		this.pros = pros;
	}

	public Integer getUid() {
		return uid;
	}

	public void setUid(Integer uid) {
		this.uid = uid;
	}

	public String getUname() {
		return uname;
	}

	public void setUname(String uname) {
		this.uname = uname;
	}

	public String getUpass() {
		return upass;
	}

	public void setUpass(String upass) {
		this.upass = upass;
	}

	public String getHead() {
		return head;
	}

	public void setHead(String head) {
		this.head = head;
	}

	public Timestamp getRegtime() {
		return regtime;
	}

	public void setRegtime(Timestamp regtime) {
		this.regtime = regtime;
	}

	public Integer getGender() {
		return gender;
	}

	public void setGender(Integer gender) {
		this.gender = gender;
	}

	public List<Topic> getTopicList() {
		return topicList;
	}

	public void setTopicList(List<Topic> topicList) {
		this.topicList = topicList;
	}

}

IOC案例的测试

package com.yc.test;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.yc.test.bbs.bean.User3;

public class User3Test {
	
protected ApplicationContext context;
	
	@Before
	public void before() throws Exception{
		//加载Spring配置文件,根据文件创建对象
		context = new ClassPathXmlApplicationContext("User3.xml");
		
	}
	
	@Test
	public void TestUser3(){
		//得到通过反射创建的对象
		User3 user = (User3) context.getBean("user3");
		User3 user1 = (User3) context.getBean("user3");
		System.out.println(user);//(若对象能创建则会输出对象的地址)com.yc.test.bbs.bean.User3@1a0f02a
		System.out.println(user1);//(若对象能创建则会输出对象的地址)com.yc.test.bbs.bean.User3@1a0f02a
		System.out.println(user == user1);//true
	}
}

问题 

  最后给大家提一个问题为啥最后的user和user1是同一个对象(可以去了解di  依赖注入)

猜你喜欢

转载自blog.csdn.net/qq_35654259/article/details/81913367
今日推荐