spring基础整理
基础配置
1.导spring和核心jar包:spring-context
2.添加spring配置文件
3.加载配置文件,获取实例化对象
简单实现
1.编写bean对象
package com.xxxx.service;
public class UserService {
public void test(){
System.out.println("Hello Spring!");
}
}
2.添加spring配置文件,在src/main/resource目录下创建spring.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
xmlns 即 xml namespace xml使用的命名空间
xmlns:xsi 即xml schema instance xml 遵守的具体规范
xsi:schemaLocation 本文档xml遵守的规范 官方指定
-->
<!--
在spring中配置bean对象
id:bean对象的id,唯一标识。一般是Bean对象的名称的首字母小写
class:bean对象的类路径
-->
<bean id="userService" class="com.xxxx.service.UserService"></bean>
</beans>
3.加载配置文件,获取实例化对象
package com.xxxx;
import com.xxxx.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
// 获取Spring上下文环境 (加载配置文件)
ApplicationContext ac = new
ClassPathXmlApplicationContext("spring.xml");
// 通过getBean方法得到Spring容器中实例化好的Bean对象 (实例化Bean对象)
// userService代表的是配置文件中bean标签的id属性值
UserService userService = (UserService) ac.getBean("userService");
// 调用方法 (使用实例化对象)
userService.test();
}
}
Spring IOC 手动装配(注入)
Spring 支持的注入方式共有四种:set 注入、构造器注入、静态工厂注入、实例化工厂注入。
set方法注入
属性字段需要提供set方法,四种方式,推荐使用set方法注入
1.属性字段提供set方法
public class UserService {
// 业务对象UserDao set注入(提供set方法)
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
2.配置文件的bean标签设置property标签
<?xml version="1.0" encoding="UTF-8"?>
<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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
IOC通过property标签手动装配(注入):
Set方法注入
name:bean对象中属性字段的名称
ref:指定bean标签的id属性值
-->
<bean id="userDao" class="com.xxxx.dao.UserDao"></bean>
<bean id="userService" class="com.xxxx.service.UserService">
<!--业务对象 注入-->
<property name="userDao" ref="userDao"/>
</bean>
</beans>
3.也可以给字段,集合,属性设置set注入不常用。
Spring IOC 自动装配(注入)
注解方式注入 Bean
对于 bean 的注入,除了使用 xml 配置以外,可以使用注解配置。注解的配置,可以简化配置文件,
提高开发的速度,使程序看上去更简洁。对于注解的解释,Spring对于注解有专门的解释器,对定义的注解进行解析,实现对应bean对象的注入。通过反射技术实现。
准备环境
引入 javax.annotation-api 包
spring.xml
<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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启自动化装配(注入)-->
<context:annotation-config/>
<bean id="userDao" class="com.xxxx.dao.UserDao"></bean>
<bean id="userService" class="com.xxxx.service.UserService"></bean>
</beans>
给注入的bean对象添加注解
@Resource注解: 名称查找对应的bean对象 (属性字段的名称与bean标签的id属性值相等)
1.如果属性字段名称未找到,则会通过类型(Class类型)查找
2.属性可以提供set方法,也可以不提供set方法
3.注解可以声明在属性级别 或 set方法级别
4.可以设置name属性,name属性值必须与bean标签的id属性值一致;如果设置了name属性值,就
只会按照name属性值查找bean对象
5.当注入接口时,如果接口只有一个实现则正常实例化;如果接口存在多个实现,则需要使用name
属性指定需要被实例化的bean对象
例:
public class UserService {
@Resource(name = "userDao") // name属性值与配置文件中bean标签的id属性值一致
private UserDao ud;
public void test() {
// 调用UserDao的方法
ud.test();
}
}
@Autowired注解:
1.默认通过类型(Class类型)查找bean对象 与属性字段的名称无关
2.属性可以提供set方法,也可以不提供set方法
3.注解可以声明在属性级别 或 set方法级别
4.可以添加@Qualifier结合使用,通过value属性值查找bean对象(value属性值必须要设置,且值要
与bean标签的id属性值对应)
例:
/**
* @Autowired注解实现自动化注入
* 可以添加@Qualifier结合使用,通过value属性值查找bean对象
value属性值必须要设置,且值要与bean标签的id属性值对应
*/
public class UserService {
@Autowired
@Qualifier(value="userDao") // value属性值必须要设置,且值要与bean标签的id属性值对应
private UserDao userDao;
public void test() {
userDao.test();
}
}
推荐使用@Resource 注解是属于J2EE的,减少了与Spring的耦合。
Spring扫描器
实际的开发中,bean的数量非常多,采用手动配置bean的方式已无法满足生产需要,Spring这时候
同样提供了扫描的方式,对扫描到的bean对象统一进行管理,简化开发配置,提高开发效率。
spring ioc 扫描器的配置
Spring IOC 扫描器
作用:bean对象统一进行管理,简化开发配置,提高开发效率
1、设置自动化扫描的范围
如果bean对象未在指定包范围,即使声明了注解,也无法实例化
2、使用指定的注解(声明在类级别) bean对象的id属性默认是 类的首字母小写
Dao层:
@Repository
Service层:
@Service
Controller层:
@Controller
任意类:
@Component
注:开发过程中建议按照指定规则声明注解
设置自动化扫描范围
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 设置自动化扫描的范围 -->
<context:component-scan base-package="com.xxxx"/>
</beans>
注解开发简单实现
例:
@Service
public class UserService {
@Resource
private UserDao userDao;
public User userLogin(){
return userDao.login();
}
}