Spring七天速成:入门必看(二)
创始人
2024-04-10 14:35:44

-----持续更新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的常用子元素

元素描述
  • index:用于设置构造参数的序号
  • type:用于指定构造参数类型
  • ref:用于指定参数的值
  • value(同上)
  • name:即Bean中成员变量的属性名(username、uid、uadress、usex)
  • 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标明工厂方法。


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;}@Overridepublic 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的运用也有更加深刻的理解,下次再见!

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

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...