Spring5学习笔记(一)Spring入门HelloWorld
一、简介
Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。
- 目的:解决企业应用开发的复杂性
- 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
- 范围:任何Java应用
Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。
Spring的初衷:
- JAVA EE开发应该更加简单。
- 使用接口而不是使用类,是更好的编程习惯。Spring将使用接口的复杂度几乎降低到了零。
- 为JavaBean提供了一个更好的应用配置框架。
- 更多地强调面向对象的设计,而不是现行的技术如JAVA EE。
- 尽量减少不必要的异常捕捉。
- 使应用程序更加容易测试。
Spring的目标:
- 可以令人方便愉快的使用Spring。
- 应用程序代码并不依赖于Spring APIs。
- Spring不和现有的解决方案竞争,而是致力于将它们融合在一起。
Spring的基本组成:
- 最完善的轻量级核心框架。
- 通用的事务管理抽象层。
- JDBC抽象层。
- 集成了Toplink, Hibernate, JDO, and iBATIS SQL Maps。
- AOP功能。
- 灵活的MVC Web应用框架。
优点:
- JAVA EE应该更加容易使用。
- 面向对象的设计比任何实现技术(比如JAVA EE)都重要。
- 面向接口编程,而不是针对类编程。Spring将使用接口的复杂度降低到零。(面向接口编程有哪些复杂度?)
- 代码应该易于测试。Spring框架会帮助你,使代码的测试更加简单。
- JavaBean提供了应用程序配置的最好方法。
- 在Java中,已检查异常(Checked exception)被过度使用。框架不应该迫使你捕获不能恢复的异常。
缺点
- 使用了大量的反射机制,反射机制非常占用内存。
二、入门实例
ioc.xml
<?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.xsd">
<!-- 注册一个Person对象,Spring会自动创建这个Person对象 -->
<!--
一个Bean标签可以注册一个组件(对象、类)
class:写要注册组件的全类名
id:这个对象的唯一标识
-->
<bean id = "person01" class="com.dong.Person">
<!-- 使用property标签为Person对象赋值
name = "lastName" : 指定属性名
value = "李四" : 为该属性赋值
-->
<property name="lastName" value="李四"></property>
<property name="age" value="20"></property>
<property name="gender" value="男"></property>
<property name="email" value="lisi@qq.com"></property>
</bean>
</beans>
Person实体类
public class Person {
private String lastName;
private Integer age;
private String gender;
private String email;
@Override
public String toString() {
return "Person [lastName=" + lastName + ", age=" + age + ", gender=" + gender + ", email=" + email + "]";
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
创建Junit Test测试类
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.dong.Person;
class IOCTest {
/**
* 从容器中拿到这个组件
*/
@Test
void test() {
//ApplicationContext:代表IOC容器
//ClassPathXmlApplicationContext:当前应用的xml配置在classpath内路径下
//创建ioc容器
ApplicationContext application = new ClassPathXmlApplicationContext("ioc.xml");
//容器帮我们创建好对象了,根据xml中的id拿值
Person person = (Person)application.getBean("person01");
System.out.println(person);
}
}
运行结果
三、HelloWorld入门总结
先导包在创建配置文件
类图标出现s表明Spring接管了该类
new ClassPathXmlApplicationContext(“ioc.xml”); ioc容器的位置文件在类路径下
new FileSystemXmlApplicationContext(“D://ioc.xml”); ioc容器的配置路径在磁盘路径下
容器中对象的创建在容器创建完成的时候就已经创建好了;
即:ApplicationContext application = new ClassPathXmlApplicationContext(“ioc.xml”);
同一个组件在ioc容器中时单实例的,即只会创建一份
如果获取容器中没有的组件,则会报错
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'xxx' available
ioc容器在创建这个组件对象的时候,(property)会利用setter方法为javaBean的属性赋值
javaBean的属性名是由->getter/setter方法中set后面那一串字符串首字母小写得到的
觉得写的不错的小伙伴,可以点赞关注和收藏哦,博主会持续发布与大家共同学习!
- 点赞
- 收藏
- 关注作者
评论(0)