Spring Boot 入门

Spring简介

  • Spring Boot的目的在于创建和基于spring框架的项目。Spring Boot会选择 合适Spring子项目和第三番开源库进行整合。大部分Spring Boot应用只需要很少的配置就可以快速启动。
  • Spring Boot基于 Spring 4.0诞生的,提供了一种快速使用Spring的方式。
Spring Boot特点
  1. 基于spring开发,入门更快。
  2. 可以独立运行,不依赖于服务器程序
  3. 直接嵌入Tomcat 或 Jetty服务器,不需要打包WAR文件
  4. 尽可能使用自动配置
  5. 提供了可以在生产中使用的功能,如性能指标、应用信息、应用健康
  6. 直接可以使用,通过修改默认值,无需xml文件
  7. 是大量项目的基础,如spring Cloud
    – 使编码变得简单,使配置变得简单,使部署变得简单,使监控变得简单
Spring Boot 缺点
  1. 依赖太多
  2. 缺少服务的注册和发现
  3. 文档缺少
Spring Boot 应用常景
  1. Spring的应用的场景
  2. java web应用
  3. 微服务
Spring 简单入门

Spring是一个企业级开发框架,为了解决企业级项目(EJB)开发,过于复杂而创建的,框架的主要优势之一是分层架构,开发者可以自主选择框架。
Spring的核心是Ioc和AOP。 IOC是典型的工厂模式,通过工厂去注入对象,AOP是代理模式。IOC和AOP,把一个大系统分解成一个个低耦合,高内聚的模块。IOC是工厂模式,使用工厂去注入对象,AOP是动态代理模式。

spring的优点
* 方便解耦,简化开发
* Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理
* AOP编程的支持
* Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
* 声明式事务的支持
* 只需要通过配置就可以完成对事务的管理,而无需手动编程
* 方便程序的测试
* Spring对Junit4支持,可以通过注解方便的测试Spring程序
* 方便集成各种优秀框架
* Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts2、Hibernate、MyBatis、Quartz等)的直接支持
* 降低JavaEE API的使用难度

Spring出现的原因
解决企业级项目开发过于复杂尔创建的(使用EJB进行分布式应用开发,忍受重量级框架带来的种种麻烦)

IOC

IOC原理 静态工厂和实例工厂 传统开发中,需要对象时,通常由调用者来创建被调用这的实例,即对象时使用者自己new出来的。在spring中,创建对象的工作不再是由调用者负责,而是交给ioc容器完成,在推送给调用者,
这就是控制反转。
流程 ++ 加载spirng配置文件,成成ApplicationContext对象, 第二部,调用getBean。
—程序在加载xml时,对象已经出来,通过反射调用构造
bean是根据scope生成的, singleton单例,prototype原型,request请求,response

使用Spring创建装配Bean的方法

1> 使用Spring指定注解

  • @Cmponent //使用时要在context中加入这个组件类 new Context(XXX.class)
    //无法指定创建和销毁所指定的方法,无明确角色时使用
    @Repository
    //多用于装备Dao层的Bean
    @Controller
    //用于控制层
    @Resource //JSR25注解
    @Inject //需要额外导入 javax.Inext包 JSR 330
-----其他注解      
       使用@Autowired  自动装配  @Qualifier("") 别名  @Primary  冲突时,使用该注解所在的Bean

2>使用配置类

扫描创建Bean
  1. new AnnotationConfigApplicationContext(" 包名");
  2. 扫描器
    声明类,使用 @ComponentScan(“com…”) @Configuration 装饰类体
    new AnnotationConfigApplicationContext([声明的扫描器].class);
    排除装配某个bean @ComponentScan(basePackage="",excludeFilter(type=,classes={}))

Spring4示例Spring使用(基于注解 )

App.java
main{
AnnotationConfigApplicatiionContext context = new AnnotationConfigApplicationContext(MyConfig.class);
//可以使用包扫描 Context("com.....")
context.getBean(MyBean.class);   //根据类获取
contexnt.getBean("myBean");         //根据名字获取
context.getBean("&crateMyFactoryBean"); 根据名字获取工厂本身非创建出来的Bean
context.close();   
}

MyConfig.java  配置类
@configuration                                   //配置类注解
public class MyConfig{
@Bean(name="myBean")                                              //实体类注解,相当于在xml中声明Bean
  @Scope("prototype")                                                 //设置单例多例
  public MyBean createMyBean(){
     return new MyBean();
  }
  @Bean
  public RunableFactoryBean crateMyFactoryBean(){
     return new RunableFactoryBean();
 }
@Bean
  pulbic jeep createJeep(JeepFactory factory){       //将工厂注入进去,使用工厂的方法进行注册Bea
      return factory.create();
  }

}

-- 使用FactoryBean创建Bean
public class MyBeanFactoryBean implements FactoryBean<Bo>
     getObejct();  //返回的对象
     getObjectType();   //返回的类型
     isSingel();          //返回是否单例
  • 其他创建Bean的方法
    (1)
    [Bo] implements InitialzingBean,DisposableBean{
    @override
    afterPropertiesSet(){ //bean创建完成后执行一段方法
    }
    @Ovverride
    public void destory() throws Exception{ //bean销毁执行的方法
    }
    }
    (2)
    @Bean(initMethod="init"destoryMethod=“destory”)
    (3) 方法注解 @PostContrust @preDestory

Spring扩展分析
DI
  • 在类注入ApplicationContext的方法
    1. @Autowired
    ApplicationContext applicationContext;
    2. public class XXX implements ApplicationContextAware{ //实现接口,重写方法
    ApplicationContext applicationiContext ;
    public void setApplicationContext(ApplicationContext applicationiContext){
    }
    }

实现方法:BeanPostProcessor 的 postProcessBeforeInitialization postProcessAfterInitialization 方法。 在 创建bean之前和bean之后调用的方法。
postProcessBeforeInitialization //是在bean依赖装配(属性设置完)完成之后触发
postProcessAfterInitialization //是在bean init方法执行之后触发的
返回null否则从容器中获取不到。
– 用法
可用于回调,返回代理对象

  1. public class XXX{ //使用spring 4.3 的特性,在构造中自动注入
    private ApplicationContext applicationContext;
    public XXX(ApplicationContext applicationContext){
    this.applicationContext = applicationContext;
    }
    }
    局限性:1. 类只能有一个构造函数(多个构造函数,只会找默认的无参构造函数)
    2. 构造函数的对象必须在spring中有。
  • Spring容器初始化之前的扩展
    类: BeanFactoryPostProcessor
    使用方法: class XXX implements BeanFactoryPostProcessor{
    @Override
    postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory){
    //初始化完成,最先执行的代码。只触发一次
    }

}

  • 手动向Spring容器中注入bean的扩展
    实现1.
    在这里插入图片描述
    实现2. 其中bean的构造用SpringBuilder
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值