彷徨 | spring框架学习笔记一

目录

1.spring框架概念

2.spring的ioc操作

3.ioc底层原理

4.spring入门案例

5.配置文件没有提示问题

​6.spring的bean管理

7 . 属性注入

8 . p名称空间注入

9 . SpEl注入


1.spring框架概念

 

1 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 是一个分层的 JavaSE/EEfull-stack(一站式) 轻量级 开源框架。

EE 开发分成三层结构:

* WEB 层:Spring MVC.

* 业务层:Bean 管理:(IOC)

* 持久层:Spring 的 JDBC 模板.ORM

2 spring核心有两部分:

(1)控制反转 ioc:

* 比如现在有普通类,在这个类里面有普通的方法,调用这个类里面的普通的方法,需要创建类对象,使用对象调用方法。

* 创建类的对象,使用原始方式new对象。使用ioc实现对象创建,不需要手动new对象,通过配置文件方式创建对象

* 把对象创建交给spring配置

(2)面向切面 aop:

* 不通过修改源代码方式增强类里面的方法

*  aop底层动态代理

3 spring是一站式框架:

(1)spring针对javaee三层,在每一层提供解决技术

* web层:springMVC

* service层:  spring ioc

* dao层:spring jdbcTemplate

2.spring的ioc操作

1 ioc称为控制反转,把对象创建不是new出来,而是在spring使用配置方式创建

(1)把对象创建交给spring进行管理

 

3.ioc底层原理

1 ioc底层原理使用技术

(1)xml配置文件

(2)dom4j解析xml文件

(3)工厂模式

(4)反射

 

4.spring入门案例

1.导入jar包,包括四个spring框架的jar包以及俩个日志jar包

彷徨 | spring框架学习笔记一_第1张图片

2.创建XML配置文件,引入schema约束






3.创建一个类,里面创建一个方法

public class User {
	public void add() {
		System.out.println("我是add()方法");
	}
}	public void add() {
		System.out.println("我是add()方法");
	}
}

4.在配置文件中配置对象




        
	
	
        

        

5.进行测试

	/**
	 * 第一种方法测试,直接创建User对象
	 */
	@Test
	public void testUser() {
		// 1 加载spring配置文件
		//加载spring配置文件,把配置对象创建
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		// 2 根据id值获取对象
		User user = (User) context.getBean("user");
		System.out.println(user);
		user.add();
	}

5.配置文件没有提示问题

引入配置文件

彷徨 | spring框架学习笔记一_第2张图片
6.spring的bean管理

 

6.1 : 什么是bean管理

  两个操作:

(1)创建对象(bean实例化)

(2)设置类里面属性值(注入属性)

6.2 : spring的bean管理有两种方式

(1)基于xml配置文件方式

(2)基于注解方式

6.3 : Bean实例化的方式

1 在spring里面通过配置文件创建对象

(1)创建对象操作

2 bean实例化(创建对象)三种方式实现

 

第一种 使用类的无参数构造创建

public class User {
	public void add() {
		System.out.println("我是add()方法");
	}
}

	
	@Test
	public void testUser() {
		// 1 加载spring配置文件
		//加载spring配置文件,把配置对象创建
		ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
		// 2 根据id值获取对象
		User user = (User) context.getBean("user");
		System.out.println(user);
		user.add();
	}

第二种 使用静态工厂创建

(1)创建静态的方法,返回类对象

public class Bean2 {
	public void bean2() {
		System.out.println("我是Bean2类的bean2()方法");
	}
}
public class Bean2Factory {
	public static Bean2 getBean2() {
		return new Bean2();		
	}
}
  
    
/**
* 第二种方式创建,使用静态工厂
*/
@Test
public void testGetBean2() {
	ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
	Bean2 bean2 = context.getBean("bean2",Bean2.class);
	bean2.bean2();
}
 

第三种 使用实例工厂创建

(1)创建不是静态的方法,返回类对象

public class Bean3 {
	public void bean3() {
		System.out.println("我是Bean3类的bean3()方法");
	}	
}
public class Bean3Factory {
	public Bean3 getBean3() {
		return new Bean3();
	}
}
    
    
    
	/**
	 * 第三种方式,创建工厂对象
	 */
	@Test
	public void testGetBean3() {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
		Bean3 bean = context.getBean("bean3" ,Bean3.class);
		bean.bean3();
	}

 

6.4 : bean标签常用属性

 

1 id属性
(1)根据id属性值获取对象
(2)在一个spring配置文件中,可以有多个bean标签,但是bean标签id属性值不同
2 class属性
(1)类的全路径
3 name属性
(1)name属性作用和id属性一样的
(2)id属性值里面不能包含特殊符号的
(3)name属性值可以包含特殊符号
4 scope属性
(1)主要作用:配置创建对象是单实例还是多实例对象
(2)属性值:
* 默认值,singleton,表示单实例对象
* prototype,表示多实例对象
* action是多实例对象
request:把创建对象放到request里面
session:把创建对象放到session里面
globalSession:把创建对象放到globalSession里面
** 单点登录

6.5 : Bean生命周期配置

6.5.1  :  XML配置文件测试Bean生命周期

package com.edu.xiaoniu.bean;
/**
 * XML配置文件的方式测试生命周期
 * @author Administrator
 *
 */

public class BeanLive2 {
	public void show() {
		System.out.println("我是BeanLive类的show()方法.....");
	}
	public void init() {
		System.out.println("我是BeanLive类的init()方法.....");
	}
	public void destory() {
		System.out.println("我是BeanLive类的destory()方法....");
	}
}

	
	/**
	 * XML配置文件方式测试生命周期
	 */
	@Test
	public void testBeanLive2() {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		BeanLive2 beanLive = context.getBean("beanLive2",BeanLive2.class);
		beanLive.show();
		context.close();
	}

6.5.2 : 注解方式测试Bean生命周期

 
/**
 * 注解方式测试生命周期
 * @author Administrator
 *
 */

@Service("beanLive")public class BeanLive {public void show() {System.out.println("我是BeanLive类的show()方法.....");}@PostConstructpublic void init() {System.out.println("我是BeanLive类的init()方法.....");}@PreDestroypublic void destory() {System.out.println("我是BeanLive类的destory()方法....");}}

    
    	
 
/**
 * 注解方式测试生命周期
 */

     @Test    public void testBeanLive() {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");BeanLive beanLive = context.getBean("beanLive",BeanLive.class);beanLive.show();context.close();    }

7 . 属性注入

 

1 .  一个类里面有属性,向类里面的属性设置值,这个过程叫做属性注入
2 .  向类里面属性设置值,java代码中有三种实现方式:分别为无参构造(set)方法,有参构造,接口注入

 

2.1 无参构造,即set方法设置值

public class User1 {
	private String name;
	private String age;
	
	public void setName(String name) {
		this.name = name;
	}

	public void setAge(String age) {
		this.age = age;
	}
}

2.2 有参构造

public class User2 {
	private String name ;
	private String age ;
	
	public String getName() {
		return name;
	}

	public String getAge() {
		return age;
	}

	public void user(String name,String age) {
		this.name = name;
		this.age = age ;
	}
}

2.3接口注入

public interface User3 {
	public void add(String name,String age);
}
public class TestUser3 implements User3{
	
	private String name;
	private String age;
	
	@Override
	public void add(String name, String age) {
		this.name = name;
		this.age = age;
		System.out.println();
	}
	
}

 

3 . spring框架里面支持是set方法注入和有参数构造注入

3.1 spring 框架使用有参构造注入

第一步 : 创建一个类.定义属性,生成有参构造

public class Book {
	
	private String bname;
	private String author;
	
	//生成有参构造
	public Book(String bname, String author) {
		super();
		this.bname = bname;
		this.author = author;
	}
	
	public void add() {
		System.out.println("书名:" + bname + "\n作者:" + author);
	}
	
}

第二步 : 在配置文件中注入属性

标签里面 id 属性自定义一个值 , 用于加载类的时候使用 , class 为类名全路径

标签里面 name 值为要赋值的属性名 , value 为要赋的值

     
     
     	
     	
     

第三步 : 测试

	/**
	 * 测试spring框架有参属性注入
	 */
	@Test
	public void testBook() {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
		Book bean = context.getBean("book",Book.class);
		bean.add();
		
	}

3.2 spring 框架使用set()方法注入

第一步 : 创建对象 ,设置属性 ,生成set方法

    创建一个add()方法用于测试是否赋值成功

public class Orders {
	private String oname;
	private String oaddress;
	
	public void setOname(String oname) {
		this.oname = oname;
	}
	public void setOaddress(String oaddress) {
		this.oaddress = oaddress;
	}
	
	public void add() {
		System.out.println("物品:" + oname + "地址:" + oaddress);
	}
}

第二步 : 配置文件赋值

标签中的 id 属性作为一个标识 , 自己设置 , 用于创建类的时候用,class为类的全路径

标签里面name为要赋值的属性的名称,value为要赋的值

标签用于有参数构造用,标签用于set()方法用



    
    
 

第三步 : 测试

/**
 * 测试spring框架set()方法注入
 */
@Test
public void testOrder() {
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    Orders bean = context.getBean("order",Orders.class);
    bean.add();	
}

3.3 spring 框架对象类型属性注入

第一步 : 创建UserDao类和UserService俩个类,其中UserDao类作为属性添加注入到UserService类中

public class UserDao {

}
public class UserService {

	private UserDao userDao;
	
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	
	public void add() {
		System.out.println(userDao);
	}
}

第二步 : 在配置文件中将UserDao类作为属性注入到UserService类中

     
     
     
	 
     

第一个标签为要注入的对象,id 为标识 , class 为要作为属性注入的对象的全路径

第二个标签为要注入到哪里, class 为要注入的类的全路径 , name 为对象属性的名称, ref 为对象所在标签的id值

如果注入普通类型属性 使用value属性 ,如果注入对象类型属性,使用ref属性

第三步 : 测试

	/**
	 * 测试spring框架对象注入
	 */
	@Test
	public void testUserService() {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
		UserService bean = context.getBean("userService",UserService.class);
		bean.add();
	}

8 . p名称空间注入

 

1 . 引入p名称空间约束

2 .  配置文件中,使用名称空间注入属性

9 . SpEl注入

你可能感兴趣的:(框架)