Spring实战笔记二

一、Spring配置的方式

    spring容器用来创建应用程序中的bean,并通过DI来协调这些对象间的关系。

    在bean进行装配时,spring提供了三种主要的装配机制。

      ①在XML中进行显式配置

      ②在Java中进行显式配置

      ③隐式的bean发现机制和自动装配

二、自动化装配bean

    1、spring从两个角度来实现自动化装配

      ①组件扫描(component scanning):Spring会自动发现应用上下文中所创建的bean

      ②自动装配(autowiring):Spring自动满足bean之间的依赖

      示例:

        ①:定义一个接口

package soundsystem;

public interface CompactDisc {
    void play();
}

              ②创建实现类,并且加自动扫描的标签@Component,该标签会告知spring为这个类创建bean。

 1 package soundsystem;
 2
 3 import org.springframework.stereotype.Component;
 4
 5 @Component
 6 public class SgtPeppers implements CompactDisc {
 7
 8     public void play() {
 9         System.out.println("继承接口!");
10     }
11
12 }

            ③组件扫描默认是不启动的,我们需要显示的配置Spring。让它去寻找带有@Component注解的类,并为其创建bean。

        方式一:Java代码启用组件扫描。

          如果没有其他的配置,@ComponentScan默认会扫描与配置类相同的包,及其报下,所有子包。

package soundsystem;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan
public class CDPlayerConfig {
}

          方式二:通过XML配置来启用组件扫描。

<context:component-scan base-package="soundsystem"/>

          ④:测试组件扫描能够发现CompactDisc

package test;

import java.util.Date;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import soundsystem.CDPlayerConfig;
import soundsystem.SgtPeppers;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfig.class)
public class TEST {
    @Autowired
    private SgtPeppers sgtPeppers;

    @Test
    public void cdshouNotNull(){
        System.out.println("null");
    }

}

    2、为组件扫描的bean命名

      Spring会自动将类名的第一个字母小写,作为相应bean的名字。

      如果想要,自己为bean命名,则如下:

@Component("MyCd")
public class SgtPeppers implements CompactDisc {
    public void play() {
        System.out.println("继承接口!");
    }

     3、设置组件扫描的基础包

      @ComponentScan没有任何属性,它会以本包为基础包,来扫描组件

      ①:@ComponentScan("包名")

        @ComponentScan(basePackages="包名")

        @ComponentScan(basePackages={"包名1","包名2",....})

        以上的包名为String类型,是类型不安全的。

      ②:@ComponentScan(basePackageClasses={bao1.class,bao2.class})

        通过这种方式,这些类所在的包会作为组件扫描的基础包。

        在使用这种方式时,可以在包中创建一个用来扫描的空标记接口。

三、Java代码装配bean

    1、创建配置类,使用@Configuration标记。

package soundsystem;

import org.springframework.context.annotation.Configuration;

@Configuration
public class CDPlayerConfig {
}

    2、声明bean,使用@Bean标记

      @Bean会告诉Spring这个方法将会返回一个对象,该对象要注册为Spring应用上下文中的bean。

      默认情况下,bean的ID是和带@Bean的方法名是一样的,在下例中,bean的名字是sgtPepper。

      若想自己设置bean的名字,可以通过@Bean的name属性:@Bean(name="xxxx")

package soundsystem;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CDPlayerConfig {

    @Bean
    public CompactDisc sgtPepper(){
        return new SgtPeppers();
    }
}

    3、借助JavaConfig实现注入

      Spring将会拦截所有对添加了@Bean标记的方法的调用,确保添加@Bean的方法只调用一次。

      使用@Bean标记的方法,可以使用任何的java方式来产生bean。

四:XML配置bean。

五:导入和混合配置

  1、JavaConfig中引用XML配置

    ①一个JavaConfig引用另一个JavaConfig,使用@Import(xxx.class)/@Import({xxx.class,yyy.class})

    ②一个JavaConfig引用XML配置,使用@ImportResource("classpath:xxx.xml")

  2、XML配置中引用JavaConfig

    应用<bean>标签,将JavaConfig引入即可

<bean class="soundsystem.CDConfig">

    

      

时间: 2024-10-05 02:01:40

Spring实战笔记二的相关文章

Spring实战笔记2---Bean的装配

创建应用对象之间协作关系的行为通常成为装配,该篇的主要内容有两个,一个Spring装配Bean的几种方式以及Spring表达式,其实这两者是分不开的,在Spring中,对象无需自己负责查找或者创建与其关联的其他对象,相反容器负责把需要相互协作的对象一引用赋予各个对象,目前我们先说声明式的装配,注解式的装配等溜到下篇再详细记录,在声明用的xml配置文件中,可以使用表达式来完成一些简单的逻辑处理,和方法调用或者对象引用,在有些特殊的需求当中非它莫属,首先是装配Bean 声明Bean <bean id

Spring实战笔记:Spring核心(二)

spring core 面向切面的Spring 1.AOP:面向切面编程 在OOP中模块化的关键单元是类(classes),而在AOP中模块化的单元则是切面. AOP框架是Spring的一个重要组成部分.但是Spring IoC容器并不依赖于AOP,这意味着你有权利选择是否使用AOP,AOP做为Spring IoC容器的一个补充,使它成为一个强大的中间件解决方案. AOP在Spring Framework中的作用 提供声明式企业服务,特别是为了替代EJB声明式服务.最重要的服务是声明性事务管理.

mysql颠覆实战笔记(二)-- 用户登录(一):唯一索引的妙用

版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸老师署名以及课程来源地址. 一.首先我们用上节课的存储过程对两张表压100万数据(各100万). 第一表 user_sys我们使用的是InnoDB模式,小卒自己的插入结果是: 第二张表 user_sys2我们使用的是MyISAM模式,小卒自己的插入结果是: 两个引擎的效率差异明显,所以我们再使用中根据实际情况

Spring学习笔记二

第四章 Spring与数据库 一. DataSource Spring提供了在Spring上下文配置数据源bean的多种方式包括 l 通过JDBC驱动程序定义的数据源 l 通过JNDI查找的数据源 l 连接池的数据源 1. 使用数据源连接池 DBCP(database conection pool)是一个不错的连接池选择. 其中的BasicDataSource的最常用的,因为它在Spring中易于配置.在Spring中可以使用以下代码来配置dbcp. <bean id="datasourc

【慕课网实战】Spark Streaming实时流处理项目实战笔记二十之铭文升级版

铭文一级: Spring Boot整合Echarts动态获取HBase的数据1) 动态的传递进去当天的时间 a) 在代码中写死 b) 让你查询昨天的.前天的咋办? 在页面中放一个时间插件(jQuery插件),默认只取当天的数据2) 自动刷新展示图 每隔多久发送一个请求去刷新当前的数据供展示 统计慕课网当天实战课程从搜索引擎过来的点击量 数据已经在HBase中有的 自己通过Echarts整合Spring Boot方式自己来实现 铭文二级: 在Spring Boot项目pom.xml下引入<repo

Spring实战笔记3---使用表达式

如果用过jsp表达式的人见到Spring表达是,第一反应一定会是:奥,原来是它呀(应该有不同的版本).Spring表达式和jsp的表达式是大同小异,只要之前接触过jsp表达式,那么学习Spring的表达式那就是非常容易的事情了. 首先来说一下Spring表达式的一些特性,也可以说成是一些用法: *使用Bean的id来引用Bean: *调用方法和访问对象的属性: *对值进行算数.关系和逻辑运算: *正则表达式匹配 *集合操作 Spring表达式(SpEL)使用#()来标记的(jsp是使用$()),

spring实战笔记一

1.是什么? Spring是一个开源的框架,是为了解决企业级应用开发的复杂性而创建的.  简而言之,Spring是为简化Java开发而创建的. 2.如何简化开发? 为了降低java开发的复杂性,Spring采用了4中关键策略.  ①基于POJO的轻量级和最小侵入性编程  ②通过依赖注入和面向接口实现松耦合  ③基于切面和惯例进行声明式编程  ④通过切面和模板减少样板式代码 3.bean的生命周期 在传统的java应用中,bean的生命周期很简单.new关键字实例化,不用时被自动回收. 但在Spr

Spring Mvc 笔记二之异常和文件上传

spring mvc的异常与文件上传 1.异常: spring注解版的异常有局部异常和全局异常                1.局部异常对单个controller有效;(在controller类写一个处理异常的方法) @ExceptionHandler(value={UserException.class}) public String handlerExceptionTest(UserException e ,HttpServletRequest request){ request.setA

Spring实战笔记4---Spring的自定装配与自动检测

Spring的自动装配与自动检测是为了最小化Spring XML配置,如果我们有很多的Bean要装配到spring 容器中,那么我们的配置文件将会看起来很长很长,让人觉得头晕,适当的使用自动装配与自动检测,将有助于缓解以上提到的问题 *自动装配:(autowiring) 有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bean的依赖关系. *自动检测:(autodiscovery) 比自动装配更进一步,让Spri