Spring01基于XML方式实现对象创建(Ioc),依赖注入(Di)

控制反转 Ioc

Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计
思想。在 Java 开发中,Ioc 意味着将你设计好的对象交给容器控制,而不是传统
的在你的对象内部直接控制。创建对象。
就是把创建对象的过程交给外部(工厂,容器)创建,控制,实现解耦,一种设计思想

使用spring 创建对象

  1. 自定义User 对象 在这里插入图片描述
  2. 导入Spring
    导入Spring
  3. 在resource中创建spring 配置文件
    在这里插入图片描述
  4. 在spring配置文件中,设置对象创建细节

在这里插入图片描述

  1. 在测试类中创建springgIoc容器 ApplicationContext,创建User对象
    在这里插入图片描述

类路径

指我们jvm加载字节码所在的目录
就是编译后生成target目录下的classes目录,称为类路径,Java文件夹的代码,resources文件夹下的配置、资源文件,在编译后都会存放在target->classes目录下
在这里插入图片描述

spring Ioc容器(ApplicationContext)的继承结构图

光标放在要访问的类上 按ctrl+h
在这里插入图片描述
通过继承结构图发现:ApplicationContext 常用的创建方式有3种

  1. 加载类路径下的配置文件 ClassPathXmlApplicationContext
  2. 注解方式创建容器 AnnotationConfigApplicationContext
  3. 加载项目外部的配置文件创建容器 FileSystemXmlApplicationContext
ApplicationContext ac1 = new ClassPathXmlApplicationContext("bean.xml");
ApplicationContext ac2 = new AnnotationConfigApplicationContext("c://xx/bean.xml");
ApplicationContext ac3 = new FileSystemXmlApplicationContext(User.class);

spring 创建对象的3种方式

  1. 默认无参构造器,创建对象
	User user = new User();
    <bean id="user" class="com.lxjava.User"></bean>
  1. 工厂静态方法创建对象
	User user = LXBeanFactory.staticCreateUser();
    <bean id="user" class="com.lxjava.factory.LXBeanFactory" factory-method="staticCreateUser"></bean>
  1. 工厂实例方法创建对象
	LXBeanFactory factory = new LXBeanFactory();
	User user = factory.createUser();
	<bean id="factory" class="com.lxjava.factory.LXBeanFactory"></bean>
    <bean id="user" factory-bean="factory" factory-method="createUser"></bean>

依赖注入 DI

DI Dependency Injection
动态给对象属性赋值
Ioc 的一个重点是在系统运行中,动态
的向某个对象提供它所需要的其他对象。这一点是通过 DI(Dependency Injection
依赖注入)来实现的。给对象属性赋值。

基于xml方式实现 依赖注入 DI

使用带参构造函数给对象属性赋值 construct-arg

在这里插入图片描述

使用set方法给属性赋值 property

在这里插入图片描述

通过P名称空间赋值 p:age=24

p名称空间是spring3.0后才有的,使用前需要先引入
在这里插入图片描述

给集合属性赋值

在这里插入图片描述

基于注解方式创建对象

@Controller

@Service

@Repository

@Component

  1. 在对应要创建的类上添加@Component注解
    在这里插入图片描述
  2. 开启注解扫描

在这里插入图片描述

基于注解方式实现依赖注入

@Autowired

@Autowried修饰字段

在这里插入图片描述

@Autowried修饰方法

在这里插入图片描述

@Qualifier

指定注入哪个参数
与@AutoWired配合使用
在这里插入图片描述

@Resource

相当于@AutoWired与@Qualifier结合使用
jdk1.8 后不再支持。
在这里插入图片描述

@Value

1.往基本数据类型和 String 类型数据的属性赋值,不用再去xml中写值
2.配置文件取值
在这里插入图片描述

对象范围与生命周期相关的注解

@Scope

@Lazy

@PostConstruct

@PreDestroy

在这里插入图片描述

注解小结

创建对象相关的四个注解:

@Component 创建对象加入容器, 例如:工具类、其他组件

@Repository 创建对象加入容器, 例如:标识数据库访问层的组件

@Service 创建对象加入容器, 例如:标识乐屋逻辑层的组件

@Controller 创建对象加入容器 例如:标识控制层的组件

依赖注入的四个注解:

@Autowired 从容器中找对象,给属性赋值。根据类型、名称去容器中找。

@Qualifier 结合Autowired使用,可以指定按照名称去容器找对象注入。

@Value 给简单类型属性直接赋值/获取配置文件值@Value(“${key}”)

@Resource 从容器中找对象,给属性赋值。 根据名称、类型去容器中查找

生命周期相关的四个注解:

@Scope 单例/多例

@PostConstruct 初始化方法,创建对象后执行

@PreDestroy 销毁先执行

@Lazy 延迟初始化

重点:@Component 、@Autowired

原则:

  1. 无论使用XML还是注解实现IOC容器,底层实现都是一样的,做的事情都是一样的。
  2. 这两种都要掌握:XML、注解
  3. 哪种方便我们开发使用,就应用哪些方式(注解、xml)

项目应用:

  1. 自己写的类用注解
  2. jar包中的类用XML

spring 全注解开发

spring的xml 配置文件----》 spring 配置类 @Configuration

创建配置文件 @Configuration

使用xml创建的配置文件
新建一个类使用@Configuration标识

开启注解扫描 @ComponentScan(basePackages = “com.lxjava”)

xml中:

注解类使用@ComponentScan(basePackages = “com.lxjava”)

加载配置文件@PropertySource(“jdbc.properties”)

读取配置文件中的值@Value("${jdbc.driver}")

加入容器 @Bean

方法上的参数指定对象注入@Qualifier(“dataSource1”)

导入@Import

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值