首页 > 编程语言 >java项目实战-spring-基本用法01-day24

java项目实战-spring-基本用法01-day24

时间:2023-11-12 21:22:38浏览次数:43  
标签:01 java String int spring age Girl public name

目录

1. spring 简单介绍

https://spring.io

什么事 SSM?
spring-mvc
spring-framework -- web服务层
mybatis --数据持久化

2. IOC/DI --控制反转--是啥

控制反转 Inversion of Control
依赖注入 DI dependency inject
创建对象的权利或者决定位置 转移到 spring,由spring容器来创建对象

演变:

举个例子:
对所有商品打打5折
查出所有的商品 将价格打五折 保存

再次演变 接口以及实现

业务接口没变但是 实现由多种形式 可以根据需要切换到不同的实现
同样的举个例子:
对所有商品打打5折
直接一条sql就能实现 不用查找再更新

接着演进 创建对象也由spring来完成

原理的同属理解:
根据xml配置文件创建对象
将对象放入容器 (map)
根据需要 通过名字 获取对象

3. 实现

package com.msb.pojo;

/**
 * @Auther: jack.chen
 * @Date: 2023/11/12 - 11 - 12 - 15:46
 * @Description: com.msb.pojo
 * @version: 1.0
 */
public class Book {
    private int id;
    String name;
    String author;  
    double price;

    public Book() {
    }

    public Book(int id, String name, String author, double price) {
        this.id = id;
        this.name = name;
        this.author = author;
        this.price = price;
    }

    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 String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                '}';
    }
}

<?xml version="1.0" encoding="UTF-8"?>
<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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="b" class="com.msb.pojo.Book" ></bean>

</beans>
public class Test01 {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Book b = (Book)context.getBean("b");
        System.out.println(b);

    }
}

上面的实现确实能实例化一个Book对象

但是如何传参 实例化对象?

  1. 使用setter方法
  2. 使用构造器
    <bean id="b" class="com.msb.pojo.Book" >
        <property name="id" value="4"></property>
        <property name="name" value="水浒传"></property>
        <property name="author" value="施耐庵"></property>
        <property name="price" value="39.98"></property>
    </bean>

说明:这里通过setter的方式来设置属性 name="xxx" 实际上是调用setterxxxx方法来实现

    <bean id="b2" class="com.msb.pojo.Book" >
        <constructor-arg name="id" value="5"></constructor-arg>
        <constructor-arg name="name" value="时间简史"></constructor-arg>
        <constructor-arg name="author" value="霍金"></constructor-arg>
        <constructor-arg name="price" value="25.5"></constructor-arg>
    </bean>

说明:这里通过调用构造器的方式来实例化对象 name=xxx 实际上是 构造器里面形参的名称

public class Test01 {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Book b = (Book)context.getBean("b2");
        System.out.println(b);

    }
}

3. 如果 对象的 属性为引用数据类型 如何 实例化对象

Girl Boy girl的boyfriend是boy

package com.msb.pojo;

/**
 * @Auther: jack.chen
 * @Date: 2023/11/12 - 11 - 12 - 20:42
 * @Description: com.msb.pojo
 * @version: 1.0
 */
public class Boy {

    private String name;
    private int age;

    public Boy() {
    }

    public Boy(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Boy{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

package com.msb.pojo;

/**
 * @Auther: jack.chen
 * @Date: 2023/11/12 - 11 - 12 - 20:40
 * @Description: com.msb.pojo
 * @version: 1.0
 */
public class Girl {
    private int age;
    private String name;
    private Boy boyfriend;


    public Girl() {
    }

    public Girl(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public Girl(int age, String name, Boy boyfriend) {
        this.age = age;
        this.name = name;
        this.boyfriend = boyfriend;
    }

    @Override
    public String toString() {
        return "Girl{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", boyfriend=" + boyfriend +
                '}';
    }
}

public class Test02 {

    public static void main(String[] args) {
        Boy boy = new Boy("小刚", 27);

        Girl lili = new Girl(25, "lili", boy);
        System.out.println(lili);
    }
}

很简单的一个例子 但是 如何用注解来实现创建对象?

    <bean id="boy1" class="com.msb.pojo.Boy">
        <property name="name" value="小帅aaa"></property>
        <property name="age" value="27"></property>
    </bean>

    <bean id="girl1" class="com.msb.pojo.Girl">
        <property name="age" value="25"></property>
        <property name="name" value="小美1"></property>
        <property name="boyfriend" ref="boy1"></property>
    </bean>
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Girl girl1 = (Girl)context.getBean("girl1");
        System.out.println(girl1);
    }

4 如何用注解的方式 以少量的代码实现对象的创建于获取

复习一下 什么是注解

定义扫描的位置:

<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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.msb.pojo"></context:component-scan>
</beans>

public class Test03 {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Girl girl1 = (Girl)context.getBean("girl");
        System.out.println(girl1);
    }
}


其他的注解 不同之处 是使用的层 不同 加以区分 @Component 不区分层

@value 实力化对象将基本数据类型的属性注入 不易依赖setter方法
@Autoaired 将引用数据类型的属性设置

@Component
public class Boy {
    @Value("小帅11111")
    private String name;
    @Value("18")
    private int age;

    public Boy() {
    }
@Component
public class Girl {
    @Value("18")
    private int age;

    @Value("xiaomei111")
    private String name;

    @Autowired
    private Boy boyfriend;


    public Girl() {
    }
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Girl girl1 = (Girl)context.getBean("girl");
        System.out.println(girl1);
    }

标签:01,java,String,int,spring,age,Girl,public,name
From: https://www.cnblogs.com/cavalier-chen/p/17827853.html

相关文章

  • 每天5道Java面试题(第10天)
    1. 自己实现一个HashMap?HashMap的实现思路:1,利用key的hashCode计算当前对象在数组中的下标。2,存储时,如果出现hash值相同的key,此时有两种情况。(1)如果key相同,覆盖原始值;(2)如果key不同(出现冲突),则将当前key-value放入链表中3,获取值时,直接找到对应hash值对应的下标,再进行判断key是否相同,......
  • 解决javax.persistence.RollbackException: Transaction marked as rollbackOnly Ask
    解决javax.persistence.RollbackException:TransactionmarkedasrollbackOnlyAsk在使用JavaPersistenceAPI(JPA)进行对象关系映射(ORM)的Java企业应用中,经常会遇到javax.persistence.RollbackException异常,其中的错误信息为"TransactionmarkedasrollbackOnly"。这......
  • 学期2023-2024-1 20231401 《计算机基础与程序设计》第七周学习总结
    学期2023-2024-120231401《计算机基础与程序设计》第七周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第七周作业这个作业的目标自学教材:数组与链表,基于数组和基于链表实现数据结......
  • JavaScript复习——04 事件
    事件对象事件对象是由浏览器在外面触发事件的时候创建的,这个对象封装了各种事件相关的各种信息例如:鼠标的位置键盘的按键浏览器创建事件对象后,会将事件对象作为响应参数传递在DOM类型中有多种不同类型的事件对象,但是他们都一个祖先Eventevent.clientX:获取鼠标的X轴坐标......
  • 2023-2024-1 20231301 《计算机基础与程序设计》第七周学习总结
    2023-2024-120231301《计算机基础与程序设计》第七周学习总结作业信息作业链接作业课程<班级>(2023-2024-1-计算机基础与程序设计)作业要求<作业>(2023-2024-1计算机基础与程序设计第七周学习总结)作业目标<《计算机基础与程序设计》预习第八章>《计算机基础......
  • springboot使用requestmapping创建xml响应体接口
    entity下创建类文件,类名分别为:ResponseXml,ResponseItemcontroller下创建xml响应体实现方法getResponseWithXml---------ResponseXmlStart-------importjavax.xml.bind.annotation.*;//根标签@XmlRootElement(name="test1")publicclassResponseXml{privateStringum......
  • Java登陆第五天——SQL之DQL(三)
    子查询子查询就是在where中再嵌套一个查询SQL,可以理解为Java中方法的返回值。--甚至可以套中套无限套--被查询出来的表根据结果分为:单行子查询和多行子查询select列名from表名where( 另一个select语句 );准备数据--创建PersoncreatetablePerson(idint,......
  • Java中的HttpServletRequest
    Request:请求HttpServletRequest请求是获取请求行、请求头和请求体;可以通过这个方法设置防盗链,获取地址。牢记解决乱码的方式。怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此......
  • Springboot内置的工具类之ObjectUtils
    在实际业务开发中,有时候经常需要判断对象是否为空、数组是否为空、两个对象是否相等,数组中是否包含某个元素,往数组中追加元素等这些操作,每次都手写太麻烦,然后很多人的选择是封装成util工具类,实际上类似这些东西,如果项目使用了spring的框架,根本不需要封装,org.springframework.util.O......
  • Java 集合—ArrayList
    ArrayList介绍ArrayList 的底层是数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。ArrayList类位于java.util包中,使用前需要引入它,语法格式如下:importjava.util.ArrayList;//引入ArrayList类ArrayList<E>objectName=newArrayList<>();//初始化......