文章目录
一、简介
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)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。