之前写过用注解配置bean的文章,但是我还是忍不住又开始写一些基本的使用和配置,这就好像本来你已经用Java8,很爽了,突然遇到用Java1.5之前写的代码,发现自己不会,这很丢脸的好吧!!
关于Spring到底怎么好,就不废话,网上有很多说法,甚至说可以代替JavaEE,但是个人感觉这个框架太大了,感觉有没有!!
关于spring IoC,个人理解可以把它看成是专门提供各种服务的一个机构,而我们自己声明的类,如果被放入其中,则会享受这种服务。打个比喻,有一公主,如果她想要什么只要和下属说一声就可以,不用自己亲自去找,下属就会提供给她,但是前提这个 人得是公主,必须在皇宫中,对应着我们的IoC容器就是皇宫,要被操作的类就是公主。
使用Spring首先要先导入包,如果只是使用基本的功能,只需要导入基本的几个就行,其他功能按需增加。最简单的依赖如下:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
spring-beans和spring-context是spring IoC容器的基础,如果只是向下面这样使用最基本的IoC特性,这两个配置就可以了。
- spring-beans:是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行IoC操作相关的所有类;
- spring-context:为Spring核心提供了大量扩展。可以找到使用ApplicationContext特性时所需的全部类,JDNI所需的全部类等,以及对JavaEE的特性的支持。
配置bean其实就是把bean放到spring的IoC容器中,BeanFactory从名字可以看出它是工厂模式的实现,实际上是实例化,配置和管理众多bean的容器,在实例化bean之前先要实例化spring IoC容器,这样才能从它里面来取得bean实例,它有好多的实现类,如下有几种:
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
UserService service = (UserService) factory.getBean("userService");
但是我们一般都是用ApplicationContext来获取容器中的bean,这个接口是BeanFactory的孙子接口,它不仅提供和BeanFactory相同的功能,而且还有许多额外的功能,除了
对内存非常关注,否则一般都会用ApplicationContext,因为这样更方便。
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService service = (UserService) context.getBean("userService");
下面是第一个配置文件,顺便说一下文件名是随意的(开始时以为必须是applicationContext.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"
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-4.2.xsd">
<bean id="userService" class="com.demo.SpringIoC.service.UserService"/>
</beans>
使用时要导入不同模块的命名空间和文件,好多IDE都有对应的插件,否则肯定会烦死。
<bean />标识一个类的对象,id是它的标识符,以便在容器中能被唯一表示,同时可以通过getBean()获得指定bean的引用,class是全限定名,从这可以看出bean实例化的过程是通过反射实现的,那么这就有一个问题了,大家都知道通过反射实例化一个类,要求这个类必须有一个无参的构造器,如果没有的话,则会出现如下的错误:
相关文章: