spring ioc基础和简单操作

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();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值