spring源码-环境搭建

本文介绍了如何在Spring环境中使用XML方式配置bean并演示了注解方式的装配。从引入Spring依赖、XML配置文件的编写,到Java代码中使用bean,以及Spring中bean作用域和懒加载的区别。重点讲解了@ComponentScan在扫描注解和作用域的应用。
摘要由CSDN通过智能技术生成

Spring环境搭建

XML和注解方式

首先需要引入 spring jar包

<dependency>
	<groupId>org.springframework</groupId>
	 <artifactId>spring-context</artifactId>
	 <version>5.0.0</version>
</dependency>

XML方式创建

编写一个 applicationContext.xml 文件,对于的Java实体类也要编写好。

<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- beanid 容器id class 使用Java的反射机制初始化 -->
    <bean id="selectDataVo" class="org.kaico.study.domain.vo.SelectDataVo">
        <property name="pageNum" value="1" />
        <property name="pageSize" value="10" />
    </bean>
</beans>

Java代码中使用这个 XML 中配置的bean

 public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        SelectDataVo selectDataVo = applicationContext.getBean("selectDataVo", SelectDataVo.class);
}

spring中注入的beanid 如果重复的话,会怎么样?
答:启动的时候会报错。

注解的方式启动

就是使用注解将 Java 类或者方法返回值(Java类)注入到springIOC容器中。
1、编写配置类(@Configration)

@Configuration
public class MyConfig {
    /**
     * @Configuration 等于 spring xml
     * <bean class="SelectDataVo" id="方法名称">
     * @return
     */
    @Bean
    public SelectDataVo selectDataVo(){

        return new SelectDataVo();
    }

}

2、编写Java类测试

public static void main(String[] args) {
        //基于注解启动
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MyConfig.class);
        SelectDataVo selectDataVo = applicationContext.getBean("selectDataVo", SelectDataVo.class);
        
    }

@ComponentScan

@ComponentScan 主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到 spring 的 bean 容器中。
@ComponentScan 注解默认就会装配标识了 @Controller、@Service、@Repository、@Component注解的类到 spring 容器中。一般配合注解 @Configuration 一起使用。

参数介绍

includeFilters 参数:包含扫包的范围。
excludeFilters参数:过滤出不加入 spring 容器中。

总结一下 @ComponentScan 的常用方式如下:

  • 自定义扫描路径下边带有 @Controller、@Service、@Repository、@Component注解加入容器。
  • 通过 includeFilters 加入扫描路径下没有以上注解的类加入 spring 容器。
  • 通过 excludeFilters 过滤出不用加入 spring 容器的类。
  • 自定义增加 @Component 注解的注解方式。

四种作用域

使用 @Scope 配置bean 的作用域。默认情况 Spring 容器是单例的。

1、singleton 单例模式
全局有且仅有一个实例

2、prototype 原型模式
每次获取 Bean 的时候都会有一个新的实例。

3、request
request 表示针对每次请求都会产生一个新的 Bean 对象,并且该 Bean 对象仅在当前 Http 请求内有效。

4、session
session 作用域表示每次请求都会产生一个新的 Bean 对象,并且该 Bean 仅在当前 Http session 内有效。

Spring 装配 bean 懒汉式与饿汉式

spring 中装配 bean 默认情况下是饿汉式。
第一种:调用的时候创建。
第二种:Spring 容器加载的时候就创建。

使用 @Lazy(true) 配置是否创建使用懒加载。

@Lazy(value = false)
@Service
@Validated
public class UserServiceImpl implements UserService {
    @Override
    public String login(String name, String password) {
        System.out.println("name"+name+"|||password"+password);
        return "";
    }
    @Override
    public String login1(TestValidatedVo testValidatedVo) {
        System.out.println("testValidatedVo" + testValidatedVo);
        return "";
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值