IoC
IoC的意思是“控制反转”,就是把我们创建对象实例的权力交给Spring框架,我们不需要再自己手动去new一个对象。它会根据我们的配置文件去帮助我们实现类,目的是解耦各个模块,就是降低各个模块之间互相依赖的程度。
我们交给IoC控制的对象就叫做Bean。
配置
基础配置
引入Spring依赖:
<dependency> |
resource中创建一个Spring配置文件:
|
我们通过一个应用程序上下文来索要我们的Bean,在Main中:
public static void main(String[] args) { |
假如我们创建了一个名为Student的类,我们就可以在Spring配置文件中将它交给IoC容器管理(这个配置文件就是我们上面写的那个"test.xml"):
<bean class="com.test.bean.Student"/> |
这就成功把Student这个类交给IoC容器了。如果我们想要使用这个类,只需要向上下文索要就行:
Student student = context.getBean(Student.class); |
Bean的配置
Bean可以配置名字或者别名,并且可以根据名字/别名来获取,别名需要另起一行:
<bean name="a" class="com.test.bean.Student"/> |
Bean默认为单例模式,也就是IoC容器只会给我们创建一个对象,不管索要多少次都会是这一个对象,如果要改为每次索要就创建一个新的对象,可以加上一个scope参数,配置为:
<bean name="a" class="com.test.bean.Student" scope="prototype"/> |
另外,如果我们希望Bean对象在使用时才创建,可以改为懒加载(默认为Spring项目启动时就创建)
<bean class="com.test.bean.Student" lazy-init="true"/> |
如果想要控制加载顺序,可以加上一个参数:
<bean name="teacher" class="com.test.bean.Teacher"/> |
这样Teacher就会在Student前加载。
依赖注入
用来指定Bean中变量的值。
指定student中的teacher变量,引用类型用ref,其他用value:
<bean name="teacher" class="com.test.bean.ProgramTeacher"/> |
添加property其实是调用set方法,所以记得在student类中加入set方法。
但是调用的构造方法是默认的无参构造,如果我们有自己定义的构造方法,就需要使用constructor-arg:
<bean name="teacher" class="com.test.bean.ArtTeacher"/> |
它还会根据变量的个数自动匹配构造参数,如果想要指定变量类型,可以再加一个type。
如果是集合类型,会有特殊的支持,请自行根据需要查阅。
自动装配
<bean name="student" class="com.test.bean.Student" autowire="byType"/> |
注解开发
不需要xml文件了,只需要一个配置类(可以通过Import引入其他配置类):
|
Main中:
ApplicationContext context = new AnnotationConfigApplicationContext(MainConfiguration.class); |
还可以配置其他属性:
|
如果需要引入其他的Bean,直接当参数传入即可:
|
自动装配:
public class Student { |
如果是我们自己创建的类,可以在类文件中加入注解@Component
,就不需要再在配置文件中配置为Bean了:
//同样可以自己起名字 |
然后配置一下包扫描:
|