0
点赞
收藏
分享

微信扫一扫

SSM入门—Spring框架-IOC简单案例

控制反转:创建对象

把对象的创建权交给了Spring容器


基于XML实现

1、maven 导入依赖

<!--Maven会自动添加当前jar依赖的其他jar-->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.1.9.RELEASE</version>
</dependency>

SSM入门—Spring框架-IOC简单案例_SSM


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>

SSM入门—Spring框架-IOC简单案例_spring_02


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


}

SSM入门—Spring框架-IOC简单案例_SSM_03

运行App.java测试效果:

SSM入门—Spring框架-IOC简单案例_spring_04


基于注解实现

在之前的基础上进行修改:

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"

SSM入门—Spring框架-IOC简单案例_SSM_05


2、(.xml)开启注解扫描

<!-- 2、基于注解实现-->
<!--开启注解扫描-->
<context:component-scan base-package="com.gxa.pojo"></context:component-scan>

SSM入门—Spring框架-IOC简单案例_spring_06


3、对需要扫描的类写注解

SSM入门—Spring框架-IOC简单案例_SSM_07


执行App.java 测试效果:

SSM入门—Spring框架-IOC简单案例_spring_08


扩展:

注解使用场景区分

@Repository 数据访问层

@Component 没有任何功能划分时,可以使用

@Service 业务逻辑层代码

@Controller 主要用于控制器

都能创建对象,并交给Spring容器管理


<bean></bean>的其他选项:

懒加载:lazy-init="true"

SSM入门—Spring框架-IOC简单案例_SSM_09


单例模式: scope="singleton"

SSM入门—Spring框架-IOC简单案例_入门教程_10

多例模式:scope="prototype"

SSM入门—Spring框架-IOC简单案例_入门教程_11

单例模式和多例模式的区别

单例通过getbean() 获取的对象是相等的,而多例不相等

依赖注入:对象赋值

目的:给对象赋值


通过xml注入

1、属性注入

前提:set方法存在

又称setter注入: 实则调用的是对象下的set方法


步骤:

1、在类中设置属性,并编写set方法

这里以UserInfo类为例:

SSM入门—Spring框架-IOC简单案例_SSM_12

SSM入门—Spring框架-IOC简单案例_SSM_13

2、在xml文件中的<bean></bean>内使用<property></property>标签

SSM入门—Spring框架-IOC简单案例_入门教程_14

3、执行App.java 测试效果

SSM入门—Spring框架-IOC简单案例_SSM_15


2、构造方法注入

前提:类的有参构造方法存在


步骤:

1、在类中编写有参构造方法

SSM入门—Spring框架-IOC简单案例_SSM_16


2、在xml文件中的<bean></bean>内使用<constructor-arg></constructor-arg>标签

SSM入门—Spring框架-IOC简单案例_spring_17


3、执行App.java 测试效果

SSM入门—Spring框架-IOC简单案例_SSM_18


常用的是,基于属性注入


扩展:通过注解注入

为实现类提供了两个注解:@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注解


制作不易,喜欢就点赞关注吧~

举报

相关推荐

0 条评论