Spring基本使用(详细完结)

关于Spring的核心功能IOC/DI在前面几篇文章写过。

  1. Spring的核心功能-IOC/DI(一)
  2. Spring的核心功能-IOC/DI(二)
  3. Spring的核心功能-IOC/DI(三)

我们讲过,在xml配置文件中配置bean组件,显得太过繁琐,而且写的越多越乱。解决此问题Spring提供了注解:用于声明Bean,注入Bean属性等功能。
注意

  1. 注解被编译器检查处理,编译器可以检查注解使用错误!
  2. 注解大多采用自动方式执行,减少配置,写的少做的多。
  3. 在源代码中直接书写,自己开发程序可以标注注解。
  4. 注解声明的组件和XML声明的组件地位平等。

我们如何像在xml配置文件中声明Bean组件?Spring提供了多个声明组件的注解,其功能是一样的。
@Component 其他情况下使用
@Service 在业务层组件上使用
@Controller 在控制器组件上使用
@Repository 在持久化层上使用
注:Spring建议按照软件的层次使用注解

1.加注解

拿User类来说,在User类上加@Component注解。

package entity;

import org.springframework.stereotype.Component;

@Component
public class User {
    private String userName;
    private Integer age;
    private String sex;
    private Phone phone;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Phone getPhone() {
        return phone;
    }

    public void setPhone(Phone phone) {
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "User{" +
                "userName='" + userName + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", phone=" + phone +
                '}';
    }
}

注意此时我们直接获取User类是获取不到的,Spring提供了包扫描配置,就是说在创建Spring容器时,自动扫描该包下所有加注解的组件,扫描到就会自动创建Bean组件。xml配置头内容参考spring官网

2.配置包扫描

<?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
        http://www.springframework.org/schema/context/spring-context.xsd">
	<--我的User类在entity包下-->
    <context:component-scan base-package="entity"/>

</beans>

这时在创建Spring容器时,Spring会自动扫描entity包下的Spring注解,然后自动创建Bean组件。自动分配ID。id为类名,第一个小写
可以自己测试一下,是否获取到该Bean组件。

    @Test
    public void componentScan(){
        User user = cpx.getBean("user",User.class);
        System.out.println(user);
    }

3.@Autowired注解

xml配置中的自动注入,我们可以使用@Autowired注解。他的规则如下:

  1. 自动按照类型匹配组件,如果类型重复再按照组件名称匹配
  2. 如果没有匹配成功,就报运行错误
  3. 注解支持"Bean属性"注入和"对象属性"注入
@Component
public class User {
    private String userName;
    private Integer age;
    private String sex;
    
    @Autowired //根据类型匹配
    private Phone phone;
	
	getter、setter方法省略。
}

有人会问,如何根据名字进行匹配?答:直接在注解上加名字就OK了。

@Component("phone")
public class Phone {
    private String phone = "12345678";
	
	。。。
}

4.其他使用

我们在xml配置文件中写的生命周期管理,懒惰初始化,多例应该怎么实现?都是一样,还是使用注解的方式,无需在xml中配置。

@Component
@Scope("prototype") //设置多例
@Lazy //懒惰初始化
public class User {
    private String userName;
    private Integer age;
    private String sex;
    @Autowired //自动注入
    private Phone phone;

    @PostConstruct//初始化执行方法
    public void init() {
        System.out.println("正在初始化。。。");
    }
    @PreDestroy//销毁之前执行方法,注意设置为多例仍然不会执行该方法
    public void destroy() {
        System.out.println("正在销毁。。。");
    }
    
 	。。。
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值