Spring框架的优点
方便解耦,简化开发,Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理,这也是IOC的作用。
IOC
IOC就是控制反转,将创建对象的过程交给spring进行管理,可以用来减低计算机代码之间的耦合度。
IOC的实现流程:
① 解析xml文档;
② 工厂模式;//将创建对象的任务交给工厂,解耦的重要步骤。
③ 采用反射设计模式创建对象
我们创建一个maven工程,并导入相应的依赖坐标
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
然后编写核心配置文件,在resources目录下创建
我们创建一个实体类,并定义一个hello方法
我们在xml配置文件中,通过IOC配置创建对象,在这里我们需要理解一个概念:bean,我们可以将bean理解为类的代理或者是类的设计图。
<!--IOC管理bean-->
<!--id:类的唯一标识符(一般就是类名)class:类的全路径名-->
<bean id="Demo" class="com.qcby.service.Demo"/>
我们先简单的通过Spring来创建一个对象实例
创建一个DemoTest类,注意在test目录下的java测试根目录创建。
public void run1(){
//加载配置文件
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取对象
Demo demo = (Demo) ac.getBean("Demo");
demo.hello();
}
然后我们通过xml配置的方式,通过对bean的管理来对创建的对象进行依赖注入。
xml配置创建及注入
首先创建一个User类
然后我们在xml文件中对其注入
<bean id="User" class="com.qcby.service.User">
<!--property完成属性的注入-->
<!-- name:属性名 -->
<!-- value:属性值 -->
<!-- ref:对象映射 :只能映射在bean中定义的 -->
<property name="age" value="18"/>
<property name="name" value="wkx"/>
<property name="demo" ref="Demo"/>
</bean>
这种方式称为属性的set方法注入,顾名思义,我们需要生成属性的set方法
我们将set方法注释,发现注入失败。
我们还可以通过构造器的方式对属性进行依赖注入
<!-- 通过类的构造器进行依赖注入 -->
<bean id="User1" class="com.qcby.service.User">
<!-- constructor-arg:构造器注入依赖 ,其余和set方式注入基本一致 -->
<constructor-arg name="age" value="25"/>
<constructor-arg name="name" value="构造器"/>
<constructor-arg name="demo" ref="Demo"/>
</bean>
然后我们来介绍一些特殊属性的注入,array、list、map
依然是新建一个Collection类,并生成set方法,并通过property的方式注入
<bean id="Collection" class="com.qcby.service.Collection">
<!--给数组类型赋值-->
<property name="strs">
<array>
<value>wkx</value>
<value>123</value>
<value>www</value>
</array>
</property>
<!-- 给集合list赋值 -->
<property name="list">
<list>
<value>ww</value>
<value>pis</value>
<value>dal</value>
</list>
</property>
<!-- 给map赋值 -->
<property name="map">
<map>
<entry key="1" value="w"/>
<entry key="2" value="ww"/>
<entry key="3" value="www"/>
</map>
</property>
</bean>
以上是通过xml配置的方式来创建对象以及依赖注入,接来下介绍用注解的方式创建对象和注入依赖。
创建对象的四个注解
@Component 普通的类 //默认当前类名就是ID名称,首字母小写
@Controller 表现层
@Service 业务层
@Repository 持久层
这四种方式在Spring框架中创建对象时,使用方式基本一致。我们以Component为例
首先需要在xml文件中开启注解扫描
<!--开启注解扫描 com.qcby所有的包中的所有的类-->
<context:component-scan base-package="com.qcby"/>
然后在需要管理的类上添加@Component注解即可。
依赖注入的四个注解
@Value 用于注入普通类型(String,int,double等类型)
@Autowired 默认按类型进行自动装配(引用类型)
@Qualifier 不能单独使用必须和@Autowired一起使用,强制使用名称注入
@Resource Java提供的注解,也被支持。使用name属性,按名称注入
常用的是前两个注解方式
@Component
public class Annotation {
@Value("16")
private Integer age;
@Value("王凯先")
private String name;
}
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Annotation annotation = (Annotation) ac.getBean("annotation");
System.out.println(annotation);
Spring框架基础入门2:AOP--面向切面编程