首页 👨‍💻计算机

Spring

1.1.简介
简介
Spring : 春天 —>给软件行业带来了春天
2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架。
2004年3月24日,Spring框架以interface21框架为基础,经过重新设计,发布了1.0正式版。
很难想象Rod Johnson的学历 , 他是悉尼大学的博士,然而他的专业不是计算机,而是音乐学。
Spring理念 : 使现有技术更加实用 . 本身就是一个大杂烩 , 整合现有的框架技术
在实际开发中,通常服务器端在赛用三层体系架构,分别是表示层(web) 业务逻辑层(Service)持久层(Dao)Spring对
每一层都提供了技术支持

官网 : http://spring.io/
官方下载地址 : https://repo.spring.io/libs-release-local/org/springframework/spring/
GitHub : https://github.com/spring-projects
1.2.优点
1、Spring是一个开源免费的框架 , 容器 .
2、Spring是一个轻量级的框架 , 非侵入式的 .
3、控制反转 IoC , 面向切面 Aop
4、对事物的支持 , 对框架的支持
一句话概括:
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。
1.3.Spring的核心容器
Spring容器会负责控制程序之间的关系,而不是由程序代码直接控制
Spring为问提供了两种核心容器,分别是BeanFactory和ApplicationContext

  • 1.21.BeanFactory

创建BeanFactroy实例时,需要提供Spring所管理容器的配置信息这些信息通常采用xml文件形式来管理
例子

  • 1.22.ApplicationContext
    ApplicationContext是Beanfactory的子接口,是另一种常用的Spring核心容器,他由org.springfarmework.comtext.App;icationContext接口定义,不仅包含了BeanFactioy的所有功能,还添加了对国际化,资源的访问,事件传播等方面的支持。创建ApplicationConttext接口实例,通常采用两种方法
  • 1.通过ClassPathXmlApplicationContext创建
    方法1
  • 2.通过FileSystemXmlApplicationContext创建
    方法2

spring入门程序

  • 项目结构
    项目结构

[blueacc open="" title="在src目录下,创建一个com。itheima.ioc包,并在包中创建接口UserDao,然后在接口定义一个Say()方法"]

package com.itheima.ioc;
public interface UserService {
public void say();
}

[/blueacc]
[blueacc open="" title="在com.itheima.ico包下,创建UserDao接口的实现类UserDaoIml,该类需要实现接口中say()方法"]

package com.itheima.ioc;
public class UserServiceImpl implements UserService {
/*声明userdao属性*/
private UserDao userDao;
/*添加UserDao属性的setter方法实现依赖注入*/
public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
}
@Override
public void say() {
    this .userDao.say();
    System.out.println("userservicer say hello world");
}
}

[/blueacc]
[blueacc open="" title="在src目录下,创建Spring的配置文件,并在配置文件中创建一个id为userDao的Bean"]

<?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-4.3.xsd">
<!-- 将指定类配置给Spring,让Spring创建其对象的实例 -->
<bean id="userDao" class="com.itheima.ioc.UserDaoImpl" />
</beans>

[/blueacc]
[blueacc open="" title="创建测试类TsetIoc,初始话spring容器并加载配置文件,然后通过Spring容器获取userDao实例,最后调用实例中say()方法"]

package com.itheima.ioc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestIoc  {
public static void main(String[] args) {
    //1.初始化spring容器,加载配置文件
    ApplicationContext applicationContext = new 
ClassPathXmlApplicationContext("applicationContext.xml");
    //2.通过容器获取userDao实例
    UserDao userDao = (UserDao) applicationContext.getBean("userDao");
    //3.调用实例中的say()方法
    userDao.say();
}
}

[/blueacc]
[blueacc open="" title="创建测试类TsetIoc,初始话spring容器并加载配置文件,然后通过Spring容器获取userDao实例,最后调用实例中say()方法"]

package com.itheima.ioc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestIoc  {
public static void main(String[] args) {
    //1.初始化spring容器,加载配置文件
    ApplicationContext applicationContext = new 
ClassPathXmlApplicationContext("applicationContext.xml");
    //2.通过容器获取userDao实例
    UserDao userDao = (UserDao) applicationContext.getBean("userDao");
    //3.调用实例中的say()方法
    userDao.say();
}
}

[/blueacc]

依赖注入

  1. 依赖注入,它与控制反转)(Ioc)的含义相同,只不过这两个称呼是从两个角度描述的同一个概念
    图片
  2. 依赖注入的实现
    [blueacc open="open" title="com.ithema.ioc包中,创建接口UserService,在接口编写一个say()方法"]
    package com.itheima.ioc;
    public interface UserService {
    public void say();
    }
    [/blueacc]

[blueacc open="open" title="创建UserService接口的实现类UserServiceImpl,在类中声明userDao属性,并添加属性setter方法"]

 package com.itheima.ioc;
 public class UserServiceImpl implements UserService {
 /*声明userdao属性*/
 private UserDao userDao;
 /*添加UserDao属性的setter方法实现依赖注入*/
 public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
 }
 @Override
 public void say() {
     this .userDao.say();
     System.out.println("userservicer say hello world");
 }
 }

[/blueacc]
[blueacc open="" title="在配置文件,创建一个id为userService的Bean,该Bean用于实例UserServiceImpl类的信息,并将userDao的实例注入到userService中"]

 <!--添加一个id为userservice的实例-->
 <bean id ="userService" class="com.itheima.ioc.UserServiceImpl">
 <!--将id为userDao的Bean实例注入到userservice-->
 <property name="userDao" ref="userDao"></property>
 </bean>

[/blueacc]
[blueacc open="" title="创建测试类TestDI,对程序测试"]

 package com.itheima.ioc;
 import javafx.application.Application;
 import javafx.stage.Stage;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 public class TestDI{
 public static void main(String[] args) {
    /*初始化spring容器加载配置文件*/
    ApplicationContext applicationContext=new 
 ClassPathXmlApplicationContext("ApplicationContext.xml");
    /*通过容器获取userservice实例*/
    UserService userService=(UserService) applicationContext.getBean("userService");
    /*通过实例中say()方法*/
    userService.say();
  }
  }

[/blueacc]

输出结果

输出结果




文章评论

目录