文章源自JAVA秀-https://www.javaxiu.com/19861.html
文章说明: 对于很多初学者而言,我们经常说spring框架,用spring框架,可是spring到底是一个什么东西,我们好像没有一个很具象的认识。我们把应用打成jar包或者war包后,把war包丢到tocat的webapp是目录或者通过命令行启动jar包,我的应用就启动了(我们也知道spring框架启动了)。但是这个启动过程对于我们是一个黑盒 ,我们不知道这个过程到底做了什么,以至于我们再修改各种配置的时候,经常犯错,导致一些简单的错误使我们一两天停滞不前。本系列文章旨在描述清楚spring的相关概念,然后使大家对spring有个更加深入的认识。文章源自JAVA秀-https://www.javaxiu.com/19861.html
文章源自JAVA秀-https://www.javaxiu.com/19861.html
1. spring的基础概念介绍
[1] 什么是spring?
Spring是一个开源的轻量级的Java开发框架。落地到我们项目使用层面,就是spring的一系列依赖的jar包,就是我们使用的那些applicationContext.xml配置文件的内容,那些注解,那些spring的相关类。文章源自JAVA秀-https://www.javaxiu.com/19861.html
[2] beanFactory和applicationContex区别。
二者都可以理解为是spring的具体落地实现,但是二者的落地程度不一样。打个比方,我们买车的时候有标配版和豪华版,这两种车都能完成我们的代步功能。但是前者能完成基本代步,而后者再内饰,外观,发动机,续航等等功能点上做的更加的优越。beanFactory可以理解为是spring的最基础最核心的实现,而applicationContext是基于beanFactory这个最基础最核心实现的丰富其它功能扩展。文章源自JAVA秀-https://www.javaxiu.com/19861.html
[3] 什么是spring容器(环境)?
一个beanFactory实例对象或者applicationContext实例对象就是一个spring容器或者说是一个spring环境。文章源自JAVA秀-https://www.javaxiu.com/19861.html
[4] 什么是启动spring容器(环境)?
从工作的角度来说,就是启动一个基于spring的web或者非web应用(定时类应用或者纯消息消费类应用);而从学习spring原理的角度来理解,可以理解为是创建了一个beanFactory或者appicationContex对象的过程,就是启动了一个spring容器或者说启动了一个spring环境。这二者本质都是一样的,只是站的角度不一样。文章源自JAVA秀-https://www.javaxiu.com/19861.html
[5] spring启动过程和运行过程的区别。
创建一个beanFactory或者appicationContex对象过程就是spring启动过程(例如:new XmlBeanFactory(), new ClassPathXmlApplicationContext())。创建前面的两个对象后,使用beanFactory或者appicationContex对象的get方法等核心功能方法就是spring的运行过程(例如:beanFactory.getBean()。applicationContext有一点不一样,new ClassPathXmlApplicationContext()这个对象的时候就完成了启动和运行过程)。文章源自JAVA秀-https://www.javaxiu.com/19861.html
[6] springMVC是什么?
和Strut2一样,是一个MVC框架,不同点在于springMVC是基于spring的,而Strut2可以不依赖于spring使用。文章源自JAVA秀-https://www.javaxiu.com/19861.html
了解上述的概念之后,我们简单的使用一下最简单的spring容器看看,这种用法不同于我们工作中启动web的jar包或者war包的形式,但是底层基本上是一致的。在正式使用之前我们先创建一个maven的web项目工程,如下图所示:文章源自JAVA秀-https://www.javaxiu.com/19861.html
文章源自JAVA秀-https://www.javaxiu.com/19861.html
2. xml方式配置bean
第一步:在model目录下创建一个User实体类文章源自JAVA秀-https://www.javaxiu.com/19861.html
@Data
@NoArgsConstructor
@ToString
@EqualsAndHashCode
public class User implements Serializable {
private static final long serialVersionUID = 4800166777883697833L;
private Long id;
private String name;
private String identity;
private String mobile;
private String bankcard;
private Integer age;
private Integer gender;
}
第二步:在service目录下创建如下的接口和接口实现类文章源自JAVA秀-https://www.javaxiu.com/19861.html
public interface UserService {
User findUserById(Long id);
}
public class UserServiceImpl implements UserService {
@Override
public User findUserById(Long id) {
User user = new User();
user.setId(id);
user.setName("张山");
user.setIdentity("张山");
user.setBankcard("36457736355363");
user.setMobile("16752652625");
user.setGender(2);
user.setAge(18);
return user;
}
}
第三步:创建好一个web工程之后,我们在resource目录下创建一个spring的标准配置文件,即appicationContext.xml文件,然后配置一下userService这个bean文章源自JAVA秀-https://www.javaxiu.com/19861.html
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
">
<!--userServiceImpl这个bean-->
<bean id="userService" name="userService" class="com.minesoft.tutorial.service.UserServiceImpl"
scope="singleton"
autowire="byType"
abstract="false"
lazy-init="true"
/>
</beans>
第四步:完成上述的若干处理后,我们就可以使用两种方式启动一个spring环境了。文章源自JAVA秀-https://www.javaxiu.com/19861.html
方式一:通过创建BeanFactory对象的方式启动一个spring容器文章源自JAVA秀-https://www.javaxiu.com/19861.html
XmlBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
UserService userService = beanFactory.getBean(UserService.class);
User user = userService.findUserById(100L);
System.out.println(JSONObject.toJSONString(user));
方式二:通过创建ApplicationContext对象的方式启动一个spring容器文章源自JAVA秀-https://www.javaxiu.com/19861.html
ClassPathXmlApplicationContext cac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
UserService userService = cac.getBean(UserService.class);
User user = userService.findUserById(100L);
System.out.println(JSONObject.toJSONString(user));
3. 注解的方式配置bean
第一步:在model目录下创建一个User实体类文章源自JAVA秀-https://www.javaxiu.com/19861.html
@Data
@NoArgsConstructor
@ToString
@EqualsAndHashCode
public class User implements Serializable {
private static final long serialVersionUID = 4800166777883697833L;
private Long id;
private String name;
private String identity;
private String mobile;
private String bankcard;
private Integer age;
private Integer gender;
}
第二步:在service目录下创建如下的接口和接口实现类文章源自JAVA秀-https://www.javaxiu.com/19861.html
public interface UserService {
User findUserById(Long id);
}
public class UserServiceImpl implements UserService {
@Override
public User findUserById(Long id) {
User user = new User();
user.setId(id);
user.setName("张山");
user.setIdentity("张山");
user.setBankcard("36457736355363");
user.setMobile("16752652625");
user.setGender(2);
user.setAge(18);
return user;
}
}
第三步:我们配置一下xml文件,文章源自JAVA秀-https://www.javaxiu.com/19861.html
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
">
<!--让spring启动过程扫描带由@Controller,@Service,@Component的类,并管理这些类的创建和销毁工作-->
<context:component-scan base-package="com.minesoft.tutorial" />
</beans>
第四步:完成上述的若干处理后,我们就可以使用两种方式启动一个spring环境了。文章源自JAVA秀-https://www.javaxiu.com/19861.html
方式一:通过创建BeanFactory对象的方式启动一个spring容器文章源自JAVA秀-https://www.javaxiu.com/19861.html
XmlBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
UserService userService = beanFactory.getBean(UserService.class);
User user = userService.findUserById(100L);
System.out.println(JSONObject.toJSONString(user));
方式二:通过创建ApplicationContext对象的方式启动一个spring容器文章源自JAVA秀-https://www.javaxiu.com/19861.html
ClassPathXmlApplicationContext cac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
UserService userService = cac.getBean(UserService.class);
User user = userService.findUserById(100L);
System.out.println(JSONObject.toJSONString(user));
文章源自JAVA秀-https://www.javaxiu.com/19861.html
大叔格言: 把自己日常的学习心得做好笔记,这些笔记在将来的某一天会是一笔宝贵的财富。文章源自JAVA秀-https://www.javaxiu.com/19861.html
文章源自JAVA秀-https://www.javaxiu.com/19861.html
文章源自JAVA秀-https://www.javaxiu.com/19861.html
更多知识请关注公众号文章源自JAVA秀-https://www.javaxiu.com/19861.html

评论