Spring开发教程01

1、Spring

2、IOC:控制反转

     控制:资源的获取方式

            主动式:要什么资源都自己创建

BookServlet{

      BookService bs = new BookService();
      AirPlane ap = new AirPlane();//发杂对象的创建是比较庞大的工程
}

        被动式:获取的资源不是自己创建,而是交给一个容器进行创建和设置

BookServlet{

      BookService bs;
      Public void test01(){
        bs.checkout();
    }
}

             容器:负责管理所有的组件(有功能的类);假设BookServlet受容器管理,BookService也受容器管理;容器可以自动查到那些组件需要用到另一个组件,容器帮助我们创建BookService对象,并把BookService对象赋值过去。

             容器:主动的new资源变为被动的接受资源。

          (容器)==婚介所;主动获取===》被动接受

DI:依赖注入,容器能知道哪个组件运行的时候,需要另一个类;容器通过反射的形式,将容器中准备好的BookService对象注入(利用反射给属性赋值)到BookServlet中;

只要IOC容器管理的组件,都能使用容器提供的强大功能。

3、实验:

      HelloWorld:通过各种方式给容器中注册对象(注册会员)

      以前是自己new一个新的对象,现在将所有的对象创建交给容器进行创建,给容器注册组件

     实验步骤:

       (1)导包

              (1)核心容器
                  spring-beans-4.1.6.RELEASE.jar
                  spring-context-4.1.6.RELEASE.jar
                  spring-core-4.1.6.RELEASE.jar
                  spring-expression-4.1.6.RELEASE.jar
              (2)日志包
                  commons-logging-1.1.3.jar

       (2)写配置

               Person.java文件

/**
 * 
 */
package com.jc.bean;

/**
 * @author JC.Liu
 *
 * 2019年10月9日-下午9:18:16
 */
public class Person {
	private String name;
	private Integer age;
	private String gender;
	private String email;
	
	public Person() {
		System.out.print("创建了");
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", gender=" + gender + ", email=" + email + "]";
	}
	
	
}

                ioc.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/beans 
	http://www.springframework.org/schema/beans/spring-beans.xsd">
	<!-- 注册一个Person对象,Spring会自动创建这个Person对象 -->
	<!-- 
		一个bean可以注册一个组件(对象、类)
		class:写要注册组件的类名
		id:这个对象的唯一标识
	 -->
	<bean id="person01" class="com.jc.bean.Person">
		<!-- 
			使用property标签为Person对象的属性值
			name="name",指定属性名
			value="文波",为这个属性进行赋值
		 -->
		<property name="name" value="文波"></property>
		<property name="age" value="16"></property>
		
		<property name="gender" value="成都"></property>
		<property name="email" value="[email protected]"></property>
	
	</bean>

</beans>

    

(3)测试

        Test.java测试文件

package com.jc.test;



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

import com.jc.bean.Person;



/**
 * @author JC.Liu
 *
 * 2019年10月9日-下午9:28:41
 * 
 * 1、src:源码包开始的路径,成为类路径的开始
 * 		所有的源码包内的东西都会被合并放在类路径下
 * 		java: /bin/
 *      web:  /WEB-INF/classes/
 * 2、导包commons-logging-1.1.3.jar(依赖包)
 * 3、先导包才创建配置文件
 * 4、Spring的容器接管了标志了s的类
 */

/*
 * 注意细节:
 * 1、ApplicationContext(IOC容器的接口)
 * 2、给容器注册一个组件,我们也从容器中按照id拿到了这个组件的对象?
 * 		组件的创建工作,是容器完成的
 * 	  Person对象是什么时候创建好的
 *		容器中对象的创建完成的时候就已经创建好了
 * 3、同一组件在Ioc容器中是单实例的,容器启动完后才能都已经创建准备好了
 * 4、容器如果没有这个组件会报异常
 * 5、javaBean的属性名是由什么决定的?
 * 		getter/setter方法是属性名,set去掉后面那一串首字母
 * 		所有的都是自动生成 
 * */
public class SpringTest {
	//从容器中拿到这个组件
	@Test
	public void test() {
		//ApplicationContext代表IOC容器
		//ClassPathXmlApplicationContext():当前应用的xml配置文件在ClassPath下
		//根据spring的配置文件得到ioc容器对象
		ApplicationContext ioc=new ClassPathXmlApplicationContext("ioc.xml");
		System.out.println("容器启动完成");
		//容器帮我们创建对象
		Person bean=(Person) ioc.getBean("person01");
		System.out.println(bean);
	}

}

    测试结果:

                          

发布了78 篇原创文章 · 获赞 5 · 访问量 8296

猜你喜欢

转载自blog.csdn.net/qq_36789311/article/details/102469673
今日推荐