学习记录一 记录Spring框架学习和力扣打卡

本文记录了Spring框架中依赖注入的概念,通过一个UserDao和UserService的例子展示了如何通过构造方法和XML配置文件实现对象属性的注入。在UserServiceImpl中,通过构造方法注入UserDao,避免了空指针异常。此外,还讨论了解法一和解法二判断回文数的方法,并分享了每日英文:享受宁静和自然环境,通过沉思来治愈自己。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2022.6.23

基本知识学习

最近在学习Spring框架,现在在学习依赖这一部分,学习这里的时候主要讲的是等待框架将持久层的内容移入业务层,这样我们在使用的时候就只用调用业务层就可以了!

本次主要记录对象属性的注入!

那么在学习这里的时候网上课程老师的讲解案例如下:

创建一个UserDao接口,一个UserService接口(前者是持久层,后者是业务层)

UserDaoImpl继承UserDao接口并重写UserDao接口中的save方法

UserServiceImpl继承UserService接口并重写其中的save方法

那么怎么实现将持久层的数据封装在业务层里面,具体过程可以见下面的图

这里使用的是构造的方式

详细代码如下:

1. UserDao接口

Interface UserDao{
    public void save(){};
}

2. UserService接口

Interface UserService{
    public void save(){};
}

3. UserDaoImpl类

public class UserDaoImpl implements UserDao{
    
    private String username; //username 变量
    
    private int age; //age变量

    //设置 username 的值
    public void setUsername(String username) {
        this.username = username;
    }

    //set方法设置 age 的值
    public void setAge(int age) {
        this.age = age;
    }

    public void setUsername(String username, int age){
        this.username=username;
        this.age=age;
    }

    public UserDaoImpl() {
        System.out.println("UserImpl创建....");
    }

    @Override
    /*对接口UserDao的实现*/
    public void save() {
        System.out.println(username+"======"+age);
        System.out.println("save running.....");
    }

}

4. UserServiceImpl类

public class UserServiceImpl implements UserService {
    private UserDao userDao;


//设置实例的时候的两种方法,set和使用有参构造!

    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    public UserServiceImpl() {

    }

    /*public void setUserDao(UserDao userDao){
        this.userDao=userDao;
    }*/

    public void save() {
        userDao.save();
        System.out.println("running.....");

    }
}

5. applicationContext.xml文件

<?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:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--bean标签-->
<!--    <bean id="userDao" class="com.wxy.dao.impl.UserDaoImpl" ></bean>-->
<!--    <bean id="userDao" class="com.wxy.factory.StaticFactory" factory-method="getUserDao" ></bean>-->

  <!--  <bean id="factory" class="com.wxy.factory.DynamicFactory"></bean>
    <bean id="userDao"  factory-bean="factory" factory-method="getUserDao"></bean>-->

    <bean id="userDao" class="com.wxy.dao.impl.UserDaoImpl" >
        <property name="username" value="zhangsan"></property>
        <property name="age" value="8"></property>
    </bean>

   <!-- <bean id="userService" class="com.wxy.service.impl.UserServiceImpl" >
        &lt;!&ndash;这里的name指的是你的方法的属性的名字,也就是这里的setUserDao中的除了set的名字,即为userDao(首字母要变成小写字母)&ndash;&gt;
        &lt;!&ndash;此处的ref就是你要配置的东西,就是这里的userDao(来源于上面的<bean id="userDao" class="com.wxy.dao.impl.UserDaoImpl" >)&ndash;&gt;
        <property name="userDao" ref="userDao"></property>
    </bean>-->
    <!--<bean id="userService" class="com.wxy.service.impl.UserServiceImpl" p:userDao-ref="userDao"></bean>-->

    <bean id="userService" class="com.wxy.service.impl.UserServiceImpl">
        <constructor-arg name="userDao" ref="userDao"></constructor-arg>
    </bean>

</beans>

6. UserControll类---对UserService的实现

public class UserControll {
    public static void main(String[] args) {
        ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService= (UserService) app.getBean("userService");//注意名字一定要写对
        userService.save();


    }
}

使用上面就可以成功的实现将持久层的数据封装到业务层里面,但是如果使用下面的代码就会出错,这个也是我这篇文章中我自己重点想要记录的!

       // 如果是下面的代码是不行的
        /*UserService userService=new UserServiceImpl();
        userService.save();*/
     //   会出现空指针异常,因为userDao是配置在Spring容器中的,但是你这里新创建的对象是调用不了容器里面的东西的!

 关于上面的数据为什么会出现空指针异常,我们创建了UserServiceImpl类的对象,然后我们使用userService这个对象调用的时候,从“4. UserServiceImpl类” 中我们可看到就会调用userDao.save();这里存在一个问题就是我们自己创建对象的时候是没有创建userDao对象的,没有给他赋值就会导致他是空的,所以会出现空指针异常;

换种方式描述,我们来分析使用Spring容器的时候的过程:

具体的查找过程就像上面那样,那么就可以正常找到userDao的值,但是如果我们自己创建的话就会出现userDao为空,那么空再指向其他的方法或者属性就会出现空指针异常的情况

 好了,晚点再记录

=========================================================================继续记录了

使用set注入的过程还可以使用下面的方法 ----- p标签

首先找到命名空间 (application.context)

然后就可以添加的方式进行P标签的添加实现set的注入

力扣打卡

今天打卡的力扣是求回文字

对于回文字我想到了两种解法

解法一:通过比较第一个与最后一个,第二个与倒数第二个这样的方式来进行

解法二:通过将数字进行反转然后再与之前的数字进行比较,相同就证明是回文字

class Solution {
    public boolean isPalindrome(int x) {
    //解法一:

    //基本思路,可以先获取输入的字符串的长度,然后需要是回文数的话就是(假设长度为n),1对应n--2对应n-1....
    //我们需要首先将整型转换为字符型,然后通过charAt来读取数据并比较!使用等号比较就可以,使用equals比较的就是地址了
        String num=Integer.toString(x); 
        int xLen=num.length();
        
        for(int i=0;i<xLen/2;i++){
            if(num.charAt(i)!=num.charAt(xLen-1-i))
            {
                return false;
            }
        }
        return true;
   
     //解法二:

        //在参考了别人的答案之后就有了一种新的解法
        //可以将你要比较的数据反过来,也就是反转,反转之后如果和之前的数据是一样的就说明是回文数
       /* if(x<0){
            return false;  //x不存在的时候就返回错误
        }
        int cur=0;
        int num=x;  //需要一个新数据去接收就是为了让后面还有一个参考对象
        while(num>0){
            cur=cur*10+num%10;
            num/=10;
        }
        return cur==x;
        */
    }
}

=========================================================================

今天就记录到这里,明天继续!

每天都要开心哈,日常分享好看的照片再加上每日英文分享

Enjoy silence and nature surroundings and heal yourself through menditation.

<享受宁静和自然环境,通过沉思来治愈自己>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值