目录
控制反转:创建对象
基于XML实现
基于注解实现
依赖注入:对象赋值
通过xml注入
控制反转:创建对象
把对象的创建权交给了Spring容器
基于XML实现
1、maven 导入依赖
<!--Maven会自动添加当前jar依赖的其他jar-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
2、创建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
https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 1、基于XML实现-->
<bean id="userInfo" class="com.gxa.pojo.UserInfo"></bean>
</beans>
3、使用测试类获取对象
public static void main( String[] args )
{
//1.使用ApplicationContext接口,就是在获取spring容器
ApplicationContext ac = new ClassPathXmlApplicationContext("spring_beans.xml");
// UserInfo userInfo = (UserInfo) ac.getBean("userInfo");
UserInfo userInfo1 = ac.getBean(UserInfo.class);
System.out.println(userInfo1);
//
// UserInfo userInfo2 = ac.getBean(UserInfo.class);
// System.out.println(userInfo1 == userInfo2);
}
运行App.java测试效果:
基于注解实现
在之前的基础上进行修改:
1、(.xml)开启命名空间
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd"
2、(.xml)开启注解扫描
<!-- 2、基于注解实现-->
<!--开启注解扫描-->
<context:component-scan base-package="com.gxa.pojo"></context:component-scan>
3、对需要扫描的类写注解
执行App.java 测试效果:
扩展:
注解使用场景区分
@Repository 数据访问层
@Component 没有任何功能划分时,可以使用
@Service 业务逻辑层代码
@Controller 主要用于控制器
都能创建对象,并交给Spring容器管理
<bean></bean>的其他选项:
懒加载:lazy-init="true"
单例模式: scope="singleton"
多例模式:scope="prototype"
单例模式和多例模式的区别:
单例通过getbean() 获取的对象是相等的,而多例不相等
依赖注入:对象赋值
目的:给对象赋值
通过xml注入
1、属性注入
前提:set方法存在
又称setter注入: 实则调用的是对象下的set方法
步骤:
1、在类中设置属性,并编写set方法
这里以UserInfo类为例:
2、在xml文件中的<bean></bean>内使用<property></property>标签
3、执行App.java 测试效果
2、构造方法注入
前提:类的有参构造方法存在
步骤:
1、在类中编写有参构造方法
2、在xml文件中的<bean></bean>内使用<constructor-arg></constructor-arg>标签
3、执行App.java 测试效果
常用的是,基于属性注入
扩展:通过注解注入
为实现类提供了两个注解:@Autowired @Resource
@Resource注解和@Autowired注解(面试常考题)
两者的共同点
@Resource注解和@Autowired注解都可以用作bean的注入.
在接口只有一个实现类的时候,两个注解可以互相替换,效果相同.
两者的不同点
@Resource注解是Java自身的注解,@Autowired注解是Spring的注解.
@Resource注解有两个重要的属性,分别是name和type,如果name属性有值,则使用byName的自动注入策略,将值作为需要注入bean的名字,如果type有值,则使用byType自动注入策略,将值作为需要注入bean的类型.如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。即@Resource注解默认按照名称进行匹配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名,按照名称查找,当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
@Autowired注解是spring的注解,此注解只根据type进行注入,不会去匹配name.但是如果只根据type无法辨别注入对象时,就需要配合使用@Qualifier注解
制作不易,喜欢就点赞关注吧~