Spring框架

本文详细介绍了Spring框架的基本概念、组成及配置方法,对比了JavaBean与EJB的不同,并深入解析了Spring框架的特点,如控制反转(IoC)和面向切面(AOP)。此外,还介绍了如何使用Spring进行依赖注入。
摘要由CSDN通过智能技术生成

一、简介

Spring框架是由于软件开发的负责性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。

1、什么是JavaBean

  • JavaBean是一种Java语言写成的可重用的Java组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。
  • 属性符合上述模式,其他Java类可以通过**自省机制(反射机制)**发现和操作这些JavaBean的属性。
  • JavaBean包含属性、方法、事件等特性。

JavaBean是一个遵循特定写法的Java类,具有以下特征:

  • 这个Java类必须具有一个无参的构造函数
  • 属性必须私有化。
  • 私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。
    什么是javabean及其用法

2、什么是EJB

EJB是Enterprise Java Beans技术的简称, 又被称为企业Java Beans。EJB技术的诞生标志着Java Beans的运行正式从客户端领域扩展到服务器领域。

3、JavaBean和EJB的区别

  • EJB运行在EJB容器中的JavaBean。一个完整的JavaEE服务器应该包括Web容器和EJB容器。
  • Web容器无法运行EJB,同时所有的JavaBean都是在服务器端进行的。
  • JavaBean是由容器所创建的(比如Tomcat),JavaBean相当于com组件,是不能被跨进程访问的
  • EJB(enterprise java bean)相当于dcom组件,是可以远程访问的(跨进程,跨平台)。但是ejb组件必须放在向webspere \ weblogic这样的容器里面。ejb客户端不会直接访问到ejb组件,而是通过容器来访问的。因为ejb组件都是容器创建和管理的。所以ejb客户端是通过容器来真正的访问ejb组件的。

二、Spring基本组成

  • 1、最完善的轻量级核心框架。
  • 2、通用的事务管理抽象层。
  • 3、JDBC抽象层。
  • 4、集成了Toplink, Hibernate, JDO, and iBATIS SQL Maps。
  • 5、AOP功能。
  • 6、灵活的MVC Web应用框架。

三、Spring配置文件(使用过程)

  • 1、首先在Spring核心配置文件applicatiionContext.xml中使用bean标签创建一个对象
<bean name="banji" class="com.study.spring.entity.Banji">
	<property name="id" value="1"/>
	<property name="name" value="java"/>
</bean>
  • 2、创建Spring容器
    • 在xml中创建的bean都会new出对象放到Spring容器 (调用类中的无参构造方法)
    • 底层实现:通过反射。在bean中class包名+类名拿到字节码对象,通过反射new对象
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    
    • 从Spring容器中根据名字取出new出来的对象
    Student student = (Student) context.getBean("student");
    
  • 3、给取出的对象赋值(Spring属性注入)
    • set()方法注入
    <bean scope="singleton" name="student" class="com.study.spring.entity.Student">
    	<property name="id" value="2"/>
    	<property name="name" value="张三"/>
    	<property name="age" value="23"/>
    	<property name="gender" value=""/>
    	<property name="banji" ref="banji"/> <!--ref 引用    name是类中属性,ref是new出来的对象-->
    </bean>
    
    • 构造方法注入
    <bean name="banji" class="com.study.spring.entity.Banji">
    	<constructor-arg name="id" value="2"/>
    	<constructor-arg name="name" value="java2107"/>
    </bean>
    
    <bean scope="singleton" name="student" class="com.study.spring.entity.Student">
    	<constructor-arg name="id" value="2"/>
    	<constructor-arg name="name" value="张三"/>
    	<constructor-arg name="age" value="23"/>
    	<constructor-arg name="gender" value=""/>
    	<constructor-arg name="banji" ref="banji"/> <!--ref 引用    name是类中属性,ref是new出来的对象-->
    </bean>
    

四、Spring优点

  • JAVA EE应该更加容易使用。
  • 面向对象的设计比任何实现技术(比如JAVA EE)都重要。
  • 面向接口编程,而不是针对类编程。Spring将使用接口的复杂度降低到零。
  • 代码应该易于测试。Spring框架会帮助你,使代码的测试更加简单。
  • JavaBean提供了应用程序配置的最好方法。
  • 在Java中,已检查异常(Checked exception)被过度使用。框架不应该迫使你捕获不能恢复的异常。

五、Spring特点

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架

1、控制反转(IoC)

  • Spring就是一个大的内存容器(一块内存区域),三层架构里面上一层不需要再去new下一层对象,在上一层只需要写下一层的接口,new对象由Spring容器帮我们完成,各层直接向Spring容器要对象就可以。
  • 对象的创建交给外部容器来完成(这里就是交给Spring容器),这就叫控制反转
  • 依赖注入,应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
public class StudentController {
    // IStudentService studentService = new StudentServiceImpl();
    private IStudentService studentService;// 创建对象  也是一个属性

    // 通过set方法注入,必须要写一个set方法
    // DI 依赖注入
    public void setStudentService(IStudentService studentService) {
        this.studentService = studentService;
    }

    public void selectAll() {
        studentService.selectAll();
    }
}
// 注解方式
@Controller("courseController")
public class CourseController {
    // <property name="studentService" ref="studentService"/>
    // 通过注解方式注入
    @Resource(name = "courseService")
    private ICourseService courseService;

    // 不需要set方式注入

    public void selectAll() {
        System.out.println("CourseController.selectAll");
        courseService.selectAll();
    }
}
@Controller
public class BanjiController {
    @Autowired
    private IBanjiService banjiService;

    public void selectAll() {
        System.out.println("BanjiController.selectAll");
        banjiService.selectAll();
    }
}

2、面向切面(AOP)

  • 让关注点(事务处理、权限、日志)和业务代码分离。
  • Spring提供了**面向切面编程(AOP)**的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值