首页 > 编程语言 >JAVA Spring学习笔记 ------Bean

JAVA Spring学习笔记 ------Bean

时间:2022-09-28 18:56:48浏览次数:53  
标签:xml JAVA 对象 Spring bean Bean 创建 id

Bean 容器

为什么要使用Bean容器

因为希望减少new的操作,这样当我们的类名发生改变时,影响会降到最小

Bean相当于一个管家

原来需要我们自己new的对象现在统统通过Bean来创建

怎么使用Bean?

首先我们需要利用pom.xml来建立对于spring的依赖

关于pom.xml是Maven的知识

这里不做赘述

<!--    Spring 依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.22.RELEASE</version>
    </dependency>

创建了spring依赖之后

我们还需要创建一个xml文件,这个xml文件就是用来配置Bean容器的

<?xml version="1.0" encoding="UTF-8"?>
<!--该文件配置Maven中的Bean文件-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        ">

这是xml的基本信息,对于后缀为context的命令现在可以暂时忽略,后续会再介绍

然后就是配置Bean

对于每一个实现类我们都要配置一个Bean来和他对应

例如

    <bean id="userDaoimpl"  class="com.demo.Dao.impl.UserDaoimpl"/>

这里的id是bean 的ID ,后续我们通过bean来创建对象,就是通过这个id来寻找对应的Bean的

class对应的就是具体的实现类,注意一定要是实现类,因为我们创建对象都是实体类对象,没有接口对象

这里bean还有其他参数

例如

scope  这个参数用来表示Bean创建的对象是否是单例对象

如果是单例对象,那么每个bean只能创建一个对象,其余的都是对这个对象的引用

换而言之

就是无论创建多少对象,这些对象有着相同的地址

如果不是单例对象,那么不同对象有着不同的地址

配置好了一个Bean

下面就是如何利用Bean来创建对象

ApplicationContext applicationContext =
              new ClassPathXmlApplicationContext("applicationContext.xml");
        
        UserDao userDao = (UserDaoimpl)applicationContext.getBean("userDaoimpl");
        userDao.setId("123");
        System.out.println(userDao.getId());

有几个需要注意的地方

首先是

ClassPathXmlApplicationContext("applicationContext.xml")里边的参数
这里参数就是我们配置Bean文件的xml文件

其次我们可以用接口来指向实现对象,这是JAVA的内容,这里不做赘述

但是要在接口中声明相应的方法

然后就是getBean("userDaoimpl")  里边的参数就是我们前边提到的bean的id

这样我们通过Bean来创建一个对象就成功了

在实际开发中,我们并不会只单一的创造一个类

实际上是类与类之间有很多依赖关系

例如在UserServiceimpl.java中我们需要用到UserDao对象

这个时候我们不需要在UserServiceimpl利用上述的代码来创建

我们可以在xml中配置UserServiceimpl时配置相应的依赖关系

    <bean id="userServiceimpl" class="com.demo.Sevice.impl.UserServiceimpl">
<!--    为了避免在Service中new Dao对象,需要配置Service和Dao的依赖关系-->
<!--     首先name是指UserServiceimpl中变量的名称   这里的name必须有set方法与之对应-->
<!--     propery表示配置当前bean属性-->
<!--     ref表示参照哪一个bean  相当于一个映射  ref = beanId-->
<!--     可以有多个property  存在多个依赖关系-->
<!--     ref是对类的映射,Value是常规数据类型的设置-->
         <property name="userDao" ref="userDaoimpl"/>

   </bean>

注意一点 ref中的变量是已经配置好的bean的id

然后在UserServiceimpl必须有setName的方法

这是通过set方法来进行配置UserDao对象

我们也可以通过构造器来配置

    <bean id="userServiceimpl" class="com.demo.Sevice.impl.UserServiceimpl">
<!--    为了避免在Service中new Dao对象,需要配置Service和Dao的依赖关系-->
<!--     首先name是指UserServiceimpl中变量的名称   这里的name必须有set方法与之对应-->
<!--     propery表示配置当前bean属性-->
<!--     ref表示参照哪一个bean  相当于一个映射  ref = beanId-->
<!--     可以有多个property  存在多个依赖关系-->
<!--     ref是对类的映射,Value是常规数据类型的设置-->
         <property name="userDao" ref="userDaoimpl"/>
<!--        <property name="name" value="haha"/>-->
<!--        构造方法注入  如果没有set方法 就不用使用ref依赖传值  那么可以通过构造器传值-->
<!--        第一行是通过形参名字传值-->
<!--        第二行是通过数据类型传值-->
<!--        第三行通过参数位置传参-->

<!--        <constructor-arg name="userDao" ref="userDaoimpl"/>-->
<!--        <constructor-arg type="java.lang.String" value="haha"/>-->
<!--        <constructor-arg index="1" value="haha"/>-->

   </bean>

 

当然为了简化开发

spring提供了自动依赖

    <bean id="userServiceimpl" class="com.demo.Sevice.impl.UserServiceimpl" autowire="byType"/>
通过byType来建立依赖  那么只需要有对应的类的bean
通过bYName来建立依赖 那么对应的类的Bean的id一定要和变量名相同
例如:UserServiceimpl有一个 private UserDao userDao 那么UserDao对应的实现类的id一定要为userDao

现在自己创建的类的Bean以及如何建立相互的依赖我们已经清楚了
下面介绍怎么创建别人写好的类bean
回到一开始我们说的xml文件中的context
实际上就是一个新的命名空间,为了防止命名重复问题(个人理解哈)
然后我们创建相应的Bean就可以了
以链接数据库为例
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql:///"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>

 然后和创建Dao对象一样

根据id来创建就可以了

当然我们也可以把property写在同一个文件中中 然后在xml中加载就可以了

<!--加载context命名空间-->
<!--    使用context命名加载propert配置文件-->
<!--    System   是否加载系统的properties
-->
    <context:property-placeholder location="classpath*:*.property" system-properties-mode="NEVER"/>
<!--    注意配置component-scan是在context中配置-->

到这里 关于bean的基础用法就说完了

下面会介绍纯注解开发

然后上边说的这一堆都没用了

标签:xml,JAVA,对象,Spring,bean,Bean,创建,id
From: https://www.cnblogs.com/zzRh-5479/p/16739218.html

相关文章

  • JAVA操作Excel (POI)
    packagecom.quantum.utils;importorg.apache.poi.hssf.usermodel.HSSFWorkbook;importorg.apache.poi.ss.usermodel.*;importorg.apache.poi.xssf.usermodel.XSSFW......
  • JAVA Spring学习笔记------注解开发
    注解开发可以在对应的类中配置Bean具体方法如下:利用@Component来声明当前类为Bean@Component("userDaoimpl")//Reposity和component效果一样//spring对于不同的层......
  • JAVA Spring学习笔记------Spring整合Mybatis
    Spring整合Mybatis首先看一下项目目录   因为以前所有的知识点都在一个模块里,而且目录比较混乱所以对模块重构了一下首先我们要在pom.xml文件中声明所需要的依赖......
  • Spring mvc源码分析系列--Servlet的前世今生
    Springmvc源码分析系列--Servlet的前世今生概述上一篇文章Springmvc源码分析系列--前言挖了坑,但是由于最近需求繁忙,一直没有时间填坑。今天暂且来填一个小坑,这篇文章我......
  • java异常
    西二旗是一个恐怖的地铁站,光排队得排很久。只要写代码就存在bug,唯一一个不出bug得方法就是不写代码。异常:在程序的运行过程中,出现的不正常情况叫做异常.注意:1.相同的代......
  • SpringBoot框架:第二章:SpringBoot中static和templates二个目录下的页面和静态资源访问
    静态页面:在resources建立一个static目录和index.htm静态文件,访问地址http://localhost:8080/index.htmlspringboot项目只有src目录,没有webapp目录,会将静态访问(html/......
  • java.lang.RuntimeException: Unable to instantiate class java.lang.Integer with v
    代码为@Value("${address.count}")privateIntegercount;单元测试中代码修改为@InjectableprivateIntegercount=1000;单元测试中类型没法自动转换,......
  • linux系统下运行java项目,(做笔记)
    原链接处:Linuxjar包后台运行-阿里云开发者社区(aliyun.com) Linuxjar包后台运行2016-04-10 1755简介: Linux运行jar包命令如下:方式一:java -jarshareniu.ja......
  • Java11安装(win11)
    下载JDK解压版本下载后解压,并放到一个没有中文路径的目录,如图所示:配置Java环境变量以Windows11系统为例,打开设置,搜索“环境”,点击“编辑系统环境变量”,如图所示:点击......
  • Java Script 原型链原理
    所有对象都有隐式原型;原型也是对象,也有隐式原型.functionUser(){}console.log(User.prototype);functionUser(){}varu=newUser();console.log(u.hasOwnProper......