目录
1.spring框架概念
2.spring的ioc操作
3.ioc底层原理
4.spring入门案例
5.配置文件没有提示问题
6.spring的bean管理
7 . 属性注入
8 . p名称空间注入
9 . SpEl注入
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
1 ioc称为控制反转,把对象创建不是new出来,而是在spring使用配置方式创建
(1)把对象创建交给spring进行管理
1 ioc底层原理使用技术
(1)xml配置文件
(2)dom4j解析xml文件
(3)工厂模式
(4)反射
1.导入jar包,包括四个spring框架的jar包以及俩个日志jar包
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();
}
引入配置文件
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(); }
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);
}
}
第二步 : 在配置文件中注入属性
第三步 : 测试
/**
* 测试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);
}
}
第二步 : 配置文件赋值
第三步 : 测试
/**
* 测试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类中
第一个
第二个
如果注入普通类型属性 使用value属性 ,如果注入对象类型属性,使用ref属性
第三步 : 测试
/**
* 测试spring框架对象注入
*/
@Test
public void testUserService() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
UserService bean = context.getBean("userService",UserService.class);
bean.add();
}
1 . 引入p名称空间约束