Spring七天速成:入门必看

Posted kook小辉的进阶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring七天速成:入门必看相关的知识,希望对你有一定的参考价值。

-----持续更新Spring入门系列文章-----

如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流!

你的点赞、关注、评论、是我创作的动力!

-------希望我的文章对你有所帮助--------

前言在前篇文章当中我们已经大概了解了Spring的基本原理和简单实例的编写测试,那么本篇将对Spring对于Bean的管理开展进一步的讲解和运用。

目录

一、什么是Bean?

1.1  Bean的配置

1.2 Bean的常用子元素

二、实例工厂实例化

2.1 引入pom依赖

2.2 创建一个类

2.3 创建工厂

 2.4 配置applicationContext

2.5 工厂实例的测试类

2.6 测试结果

三、Bean的作用域

四、装配方式

4.1 基于XML的setter的注入

4.2 基于XML的构造方法的注入

4.3 基于注解的装配

五、注解实例

5.1 编写基本类

5.2  编写Dao层接口

5.3 编写Dao层实现类

5.4 编写ServiceDao层

5.5 编写Service实现类

5.6 编写Controller类

5.7 编写测试类

5.8 测试结果

六、总结


一、什么是Bean?

        Bean是在Spring中注册的Java类,可以看做是添加到Spring容器里的一个管理对象。只有通过将Java类注册为其中的一个Bean时,也即是getBean()过程,才能使得Spring对其进行下一步管理。

1.1  Bean的配置

属性描述
id即Bean对应的唯一标识符
name可以有多个名称,用逗号隔开,即代表Bean的内涵或作用
class即具体实现类,一般为对象的全路径
scopeBean实例的作用范围,如singleton、prototype、request、session

1.2 Bean的常用子元素

元素描述
<constructor-arg>
  • index:用于设置构造参数的序号
  • type:用于指定构造参数类型
  • ref:用于指定参数的值
  • value(同上)
<property>
  • name:即Bean中成员变量的属性名(username、uid、uadress、usex)
  • value:设定该参数值
  • ref:(同上)
<value>

即上述两种注入方式对应的子元素的属性参数的赋值

<ref>(同上)

二、实例工厂实例化

        工厂实例化,实际上也是将工厂类做为一个Bean注册到Spring容器中,通过控制工厂类来实现对于实例的创建,接下来演示一个实例工厂实例,可以让我们更好的了解工厂模式在Spring中的运作规。

2.1 引入pom依赖

代码略

2.2 创建一个类

package com.itheima;
public class Bean1 
    public Bean1() 
        System.out.println("这是Bean1!");
    

2.3 创建工厂

        创建一个工厂,构造方法显示当前实例正在生成,以及创建一个生成类的方法

package com.itheima;

public class MyBeanFactory 
    public MyBeanFactory()
    
        System.out.println("bean工厂实例化中!");
    
    public Bean1 createBean()
    
        return new Bean1();
    


 2.4 配置applicationContext

        注意此处将工厂类注册为一个Bean,填写其class后,将再次把工厂类作为一个Bean,使用factory-bean来标明工厂类,且已factory-method标明工厂方法。

<?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">
        <bean id="MybeanFactory" class="com.itheima.MyBeanFactory"></bean>
        <bean id="bean1"  factory-bean="MybeanFactory" factory-method="createBean">
        </bean>

</beans>

2.5 工厂实例的测试类

        使用ApplicationContext作为Spring的容器,将注册的Bean注入,再通过获取Bean来实例化工厂类,以及自动实现工厂方法。

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test 
    public static void main(String args[])
    
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationBean1.xml");
        System.out.println(applicationContext.getBean("bean1"));
    

2.6 测试结果

三、Bean的作用域

作用域描述
singleton即单例模式,实际只创建一个实例
prototype即原型模式,每次请求都产生一个新的实例
request作用于Web,每一个HTTP请求都会有实例
session作用于Web,每一个HTTPSessioon请求都会有一个实例
global session作用于Web,限定为HTTPSession的生命周期

四、装配方式

4.1 基于XML的setter的注入

即上文中提到的setXX()以及getXX()的方法来进行赋值的方法,较为容易理解。

4.2 基于XML的构造方法的注入

即通过构造方法来对类中的成员变量进行直接的赋值的方法。

4.3 基于注解的装配

  当一个项目的Bean过多时,通过XML的装配方式,会使得applicationContext文件中内容较为臃肿,那么此时就可以用到注解来解决相关问题。

以下是常用注解:

注解描述
@Component即一个普通Bean,作用于任何层次
@Controller即控制组件Bean,用于控制层
@Service即业务逻辑Bean,用于业务层
@Repository即数据访问Bean,用于数据访问层
@Scope即Bean实例的作用域
@Value即Bean实例的注入值
@Autowired指自动装配对象
@Resource指要注入的对象
@PostConstruct指实例初始化完成之后调用的方法
@Qualifier自动装配的对象名称,通常与@Autowired联用
@PreDestory指实例销毁前调用的方法

五、注解实例

结构图:

5.1 编写基本类

package com.itheima.entity;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component("user")
@Scope("singleton")
public class User 
    @Value("1")
    private int id;
    @Value("Zhuang San")
    private String name;
    @Value("1234")
    private String password;

    public int getId() 
        return id;
    
    public void setId(int id) 
        this.id = id;
    
    public String getName() 
        return name;
    

    public void setName(String name) 
        this.name = name;
    

    public void setPassword(String password) 
        this.password = password;
    

    public String getPassword() 
        return password;
    

    @Override
    public String toString() 
        return "User" +
                "id=" + id +
                ", name='" + name + '\\'' +
                ", password='" + password + '\\'' +
                '';
    

5.2  编写Dao层接口

package com.itheima.Dao;
public interface UserDao 
    public void save();

5.3 编写Dao层实现类

package com.itheima.Dao;
import com.itheima.entity.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Repository;
@Repository("userDao")
public class UserDaoImpl implements UserDao 
    public void save()
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext2.xml");
        User user=(User) applicationContext.getBean("user");
        System.out.println(user);
        System.out.println("Executing UserDaoImpl.save() ");
    


5.4 编写ServiceDao层

package com.itheima.Service;
public interface UserService 
    public void save();

5.5 编写Service实现类

package com.itheima.Service;
import javax.annotation.Resource;
import com.itheima.Dao.UserDao;
import org.springframework.stereotype.Service;
@Service("userService")
public class UserServiceImpl implements UserService
    @Resource(name="userDao")
    private UserDao userDao;
    public void save()
        this.userDao.save();
        System.out.println("Executing UserServiceImpl.save()");
    

5.6 编写Controller类

package com.itheima.Controller;
import com.itheima.Service.UserService;
import org.springframework.stereotype.Controller;
import javax.annotation.Resource;
@Controller
public class UserController 
    @Resource(name="userService")
    private UserService userService;
    public void save()
        this.userService.save();
        System.out.println("Executing UserController.save() ");
    


5.7 编写测试类

import com.itheima.Controller.UserController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AnnotationText 
    public static void main(String args[])
        ApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext2.xml");
        UserController userController=(UserController) applicationContext.getBean("userController");
        userController.save();
    

5.8 测试结果

六、总结

        本期文章主要是关于Bean的基本装配的了解,以及基于注解实现实例的讲解,对于Spring的运用也有更加深刻的理解,下次再见!

感谢爱学习的你看到了最后,点个赞、关注支持一下吧!

《LoadRunner12七天速成宝典》来了

技术分享

 

看到自己的新书又要发行了,算算从09年第一本书开始,不知不觉已经是第四本书了(帮朋友合写的书不算),每次写完之后都会说太累了,不想再写了,但是却又次次反悔,吞下食言的苦果。如果非要说第四本书的感受,那么心态上最大的区别是我不用写一本书来证明自己的技术了,而只是为了写一些观念和思想。熟悉我的朋友都知道我还是比较IN的,不太喜欢用技术去解释技术,而以前写的书总是逃不了这个套路,直到我接触了百度阅读这个平台,有了个让我随心写作的平台,而生命中那些梗也在这一刻开始蠢蠢欲动。

 

写一本通俗易懂的入门的书,这是我这次的目标,以前写书总是为了证明自己的技术,深怕写的东西在网上找的到,深怕把简单的鸡毛蒜皮的内容写在书里面被别人认为是灌水。但是到了现在,我觉得正确的科普可能是我更想做的事情,也是常常在各个社区及QQ群上回答小白的问题时发现的,大多数提问者都没想清楚问题到底是啥,不知道怎么提问及不知道一些基本的概念。性能测试对于任何一个初学者来说都是很难的事情,自动化测试有着非常明显的可视化及相对简单的技术基础,基本可以做到三个小时入门,三个月精通,1年毕业;而性能测试需要对功能深入理解的基础、架构体系的基础以及分析调优的思路,往往入门都要三个月的基础,而外面的资料都是零散的或者针对技术细节的,导致初学者在前进的道路上始终缺乏一个正确的大方向,在深入学习的时候举步维艰。

《LoadRunner12七天速成宝典》就是在这样的目标下编写的,通过在生活中与恋恋的互动,让整个性能测试的学习过程从技术走向生活,把晦涩难懂的概念竟可能的口语化,帮助大家在初学阶段树立正确的基本概念及思想。

 

随着百度阅读10W读者到到达,这本《LoadRunner12七天速成宝典》也在11月底即将与大家见面了,有很多想说的,但是也觉得没啥好说,希望读者能够喜欢。最后谢谢人邮出版社的张涛编辑,刘涛社长,以及百度阅读,给了我一个机会去把技术文章写得就像show恩爱一样,废话就不多说了,接着请阅读章节连载和精彩书评吧。签售预定即将开始。

以上是关于Spring七天速成:入门必看的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot 速成 actuator

spring-boot 速成(11) - 单元测试

spring-boot 速成 自定义配置

spring-boot 速成 devtools之热部署

spring-boot 速成(10) -个人邮箱/企业邮箱发送邮件

spring第一冲刺阶段第七天