Spring学习路之初级IOC模块
以下内容集成到了GitHub项目中,有兴趣的朋友可以看一下GitHubhttps://github.com/HeShuai-GitHub/springDemo.git一、spring依赖引入maven依赖引入关于spring各个jar包的具体含义可以参考烟火里的尘埃二、配置文件spring默认配置文件名为applicationContext.xml在配置文件applicationContext.x
以下内容集成到了GitHub项目中,有兴趣的朋友可以看一下GitHub
https://github.com/HeShuai-GitHub/springDemo.git
一、spring依赖引入
- maven依赖引入
<!--spring依赖 start-->
<!--这个jar文件包含Spring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!-- 这个jar 文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion ofControl / Dependency Injection(IoC/DI)
操作相关的所有类。如果应用只需基本的IoC/DI 支持,引入spring-core.jar 及spring-beans.jar 文件就可以了。-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!-- 这个jar 文件为Spring 核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,
JDNI 所需的全部类,instrumentation组件以及校验Validation 方面的相关类。-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!--支持缓存Cache(ehcache)、JCA、JMX、 邮件服务(Java Mail、COS Mail)、任务计划Scheduling(Timer、Quartz)方面的类。-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!--模块提供了一个强大的表达式语言,用于在运行时查询和处理对象图。该语言支持设置和获取属性值;属性赋值,
方法调用,访问数组的内容,收集和索引器,逻辑和算术运算,命名变量,并从Spring的IOC容器的名字对象检索,
它也支持列表选择和投影以及常见的列表聚合。-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!--spring jdbc依赖,这个jar 文件包含对Spring 对JDBC 数据访问进行封装的所有类。-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!--依赖数据库的jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
<!--spring依赖 end-->
关于spring各个jar包的具体含义可以参考烟火里的尘埃
二、配置文件
spring默认配置文件名为
applicationContext.xml
在配置文件applicationContext.xml引入spring的命名空间,命名空间规定了xml文件中可以使用的标签
1 简单配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!--spring的命名空间,他的作用是,xml文件本身是可扩展标记语言,简单点说就是在xml文件中没有固定的语法标签,任何标签都可以使用
这也代表了填写标签时没有任何提示信息,而spring命名空间的作用就是规范spring的xml配置文件的标签-->
<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">
<beans>
<bean id="person" class="com.spring.ioc.modal.Person">
<!--初始化成员变量的值 value:初始化基本数据类型;ref:初始化引用变量-->
<property name="id" value="110"></property>
<property name="dog" ref="dog"></property>
</bean>
<bean id="dog" class="com.spring.ioc.modal.Dog">
<property name="name" value="小白"></property>
<property name="color" value="白色"></property>
</bean>
</beans>
</beans>
- P和C命名空间
在通过构造方法或set方法给bean注入关联项时通常是通过constructor-arg元素和property元素来定义的,引入p和c命名空间后,的把它们当做bean的一个属性来进行定义bean属性。此部分借鉴于elim168的博客
例子如下,和上述xml配置文件进行对比
<?xml version="1.0" encoding="UTF-8"?>
<!--P和C命名空间:传统在通过构造方法或set方法给bean注入关联项时通常是通过constructor-arg元素和property元素来定义的。
有了p命名空间和c命名空间时我们可以简单的把它们当做bean的一个属性来进行定义,具体属性定义如下-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<beans>
<!--set方法 p空间模式注入-->
<bean id="person" class="com.spring.ioc.modal.Person" p:id="110" p:dog-ref="dog"></bean>
<!--构造方法 c空间模式注入-->
<bean id="dog" class="com.spring.ioc.modal.Dog" c:_0="小黄" c:_1="黄色"></bean>
</beans>
</beans>
- spring jdbc 连接数据库,可以参考大胡子叔叔_的博客
需要添加jar包
<!--spring jdbc依赖,这个jar 文件包含对Spring 对JDBC 数据访问进行封装的所有类。-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!--依赖数据库的jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
配置一个db.properties的资源文件
# 数据库配置文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/beifen
jdbc.username=root
jdbc.password=123
spring的配置文件可以写成
<?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定义 来读取properties文件-->
<!-- <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:/jdbc/db.properties"></property>
</bean>-->
<!--context命名空间 读取资源文件 读取properties文件
必须先配置context命名空间,xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"
-->
<context:property-placeholder location="jdbc/db.properties"></context:property-placeholder>
<!--获取连接数据看的数据源-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/beifen"></property>
<property name="username" value="root"></property>
<property name="password" value="123"></property>
</bean>
<!--将数据源注入到jdbcTemplate中-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
三、IOC和DI
- IOC
IOS即控制反转,是一种编程思想,指将java中的创建对象的行为交给spring容器来进行操作,我们不需要关心创建对象的细节,这部分工作对于我们来说是透明的。 - DI
DI即依赖注入,也就是IOC的另外一种表示方式,简单点说,IOC就是一种反转控制思想,而Di是IOC控制反转的具体实现方式
随手记:
反射创建对象的前提是,该对象一定具有无参构造方法
Ctrl+T 查看该类的所有子类以及实现类
Ctrl+Alt+U 查看该类上级所有类的继承关系
字面量:即java中的基本数据类型以及他的包装类,再加上String类型
自动装配:也叫自动注入,即赋值,一般自动转配指的是非字面量的属性
四、IOC注解方式装配Bean
-
相关注解介绍
1.1 @Component、@Controller、@Service、@Repository
以上这四个注解都可以用来标记类,使spring ioc容器将相关类的bean自动装配到ioc容器中,功能一致,不过@Controller用来标识“控制层”;@Service用来标识“业务层”;@Repository用来标识“持久层”;@Component没有特定含义,普遍意义上的标识。1.2 @AutoWire、@Resource、@Qualifier
@AutoWire:用来自动装配ioc容器中的bean到所标识的属性中,即赋值的过程,以byType的方式在ioc容器中进行搜索,当byType搜索不到时,使用byName的方式查找
@Resource:与上述的功能基本相同,不过优先以byName的方式进行查找,查找不到时使用byType的方式查找
@Qualifier:当使用@AutoWire时,ioc容器中有两个可以匹配类型的bean时,使用@Qualifier进行指定IOC中的id -
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">
<!--需要配置 context命名空间
component-scan,组件扫描,即扫描指定包下边的所有组件;
组件:即所有被spring加载的bean
作为spring的组件进行加载,会自动在springIOC容器中生成相应的bean,这些bean的id以类的小写首字母为准;
use-default-filters:默认过滤规则,即扫描指定包下的所有类
include-filter: 只包含某个条件。
type:annotation,指定注解,assignable,指定类;
expression:指定类或注解
注:use-default-filters必须为false,不扫描包
exclude-filter:排除某个条件
ype: annotation,指定注解,assignable,指定类;
expression:指定类或注解
注:use-default-filters必须为true,扫描包,只有扫描后才可以排除
注:因为use-default-filters的属性值冲突,所以include-filter和exclude-filter可以定义多个,但是不可以同时定义
-->
<context:component-scan base-package="com.spring.ioc.main_2.annotation" use-default-filters="true">
<!--<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:include-filter type="assignable" expression="com.spring.ioc.main_2.annotation.controller.AnnotationController"/>-->
<!--<context:exclude-filter type="assignable" expression="com.spring.ioc.main_2.annotation.controller.AnnotationController"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>-->
</context:component-scan>
</beans>
五 结语
自此,spring IOC初级学习部分就差不多到这里了,博客中的一些概念可能写的并不清楚,有些时候也是在学习的过程中随笔记下来的,更全的内容我会随着我写的springDemo样例上传到了GitHub,有兴趣的朋友可以看看,路过的大神请不吝赐教。
在此再次感谢本文引入的博客对我学习过程中的帮助,技术只要分享就可以越来越好
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)