springboot学习日记(二):spring基本用法

Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的开源容器框架,用来解决企业项目开发中的复杂问题

目录

一、开闭原则

二、不修改MyServlet任何代码的方法

三、第一个Spring程序->控制反转(IOC)

1.新建一个模块

2.在pom.xml中引入Spring依赖包,并点击同步按钮

3.在main包下新建一个包resources  --> 在resources文件夹下新建xml文件,选择Spring Config,起名为applicationContext

4.把上次javaweb中的dao复制到spring中来

5.把创建的类名写到配置文件(xml/properties)中,在applicationContext.xml中敲入代码并指定类名,注意要加上包名,再给它的对象起个名

6.完成后我们在APP.java中进行调用,也就是从配置文件中读类的名字

7.接着我们开始在APP.java取对象,并打印输出,点击运行,这时我们不要再用Tomcat启动了,直接点击旁边的运行按钮即可,就可以看到数据库里的数据

四、实现开闭原则

1.我们只要在applicationContext.xml中修改类名即可

2.我们运行看看,得到数据库里另一表的数据,这样就真正做到了开闭原则,不修改App任何代码进行查询数据库的切换

3.接着在APP.java中引用两个类,并做比较,结果为False.                 原因:在java中,我们引用一个对象,就会创建一个堆空间,并且有一个栈空间指向它,当我们又引用一个对象时,它会创建一个新的堆空间,又有一个新的栈空间指向它,而比较的是内存地址,而这两者是不一样的

4.现在用里氏替换原则再来比较一下,为ture.原因:用里氏替换原则运行代码后,它会创建一个Spring容器,里面存放的就是我们要取的数据库,当两个对象分别去取的时候,其实他们取的是同一个,所以他们是一样的

五、依赖注入

1.创建service文件夹,并在service文件夹下创建UserService类,在其中写入代码

2.修改APP.java代码,用UserService来输出

3.但可以有更好的方法,和前面一样利用里氏替换原则,在applicationContext.xml增加一个service节点

4.接下来修改UserService代码,不用new方法,我们给它创建方法

5.修改APP.java代码, 用set方法对userService变量赋值,点击运行,没有问题,但是他们之间还是存在耦合性,

六、Spring 基本类型String依赖注入

1.在org.examole文件夹下新建包pojo,并创建一个实体类Person

2.声明两个成员变量age和name,并且给他们增加Getter and Setter方法

七、spring容器注解

1.上面教大家任何解决耦合性,但是发现代码好像并没有减少,现在教大家方法既实现解耦又不用很多代码,applicationContext.xml中节点的代码全都可以删掉哦,我们只用一行代码就可以代替它们,一听就很方便吧

2.在applicationContext.xml中增加一行代码使注解生效

3.我们也可以给它们赋值,在Person类中增加一个注解@Value,注意:注解只能管到离它最近的那行代码

4.其他的类也一样可以加入注解,注意:有四个注解它们功能一模一样,只是为了区分而已。


一、开闭原则

1.我们不能修改已有的类,我们想要切换不同的类,那么我们就需要新建一个新的实现类UserDaoImpl1,在UserDaoImpl1中我们可以从不同表获取值

2.我们要切换到UserDaoImpl1这个实现类,就只要修改MyServlet一行代码即可,其他均无需修改,这也就符合开闭原则,软件的扩展性也越强

二、不修改MyServlet任何代码的方法

1.把创建的类名写到配置文件(xml/properties)中
2.从配置文件中读类的名字
3.代码动态的把读到的类名的对象创建出来->反射

三、第一个Spring程序->控制反转(IOC)

IOC功能
1.开闭原则,不修改MyServlet任何代码
2.把创建的类名写到配置文件(xml/properties)中
3.从配置文件中读类的名字
4.代码动态的把读到的类名的对象创建出来->反射 JavaEE设计模式
5.Spring->IOC(控制反转)->解耦

控制反转:在使用Spring框架之后,对象的实例不再由调用者来创建,而是由Spring容器来创建,Spring容器负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样,控制权由应用代码转移到了Spring容器,控制权发生了反转,这就是控制反转。

1.新建一个模块

org.apache.maven.archetypes:maven-archetype-quickstart: 专属IOC功能

2.在pom.xml中引入Spring依赖包,并点击同步按钮

     <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.3.22</version>
    </dependency>

3.在main包下新建一个包resources  --> 在resources文件夹下新建xml文件,选择Spring Config,起名为applicationContext

4.把上次javaweb中的dao复制到spring中来

5.把创建的类名写到配置文件(xml/properties)中,在applicationContext.xml中敲入代码并指定类名,注意要加上包名,再给它的对象起个名

6.完成后我们在APP.java中进行调用,也就是从配置文件中读类的名字

7.接着我们开始在APP.java取对象,并打印输出,点击运行,这时我们不要再用Tomcat启动了,直接点击旁边的运行按钮即可,就可以看到数据库里的数据

四、实现开闭原则

也就是不修改App任何代码进行查询数据库的切换,怎么做呢?

1.我们只要在applicationContext.xml中修改类名即可

2.我们运行看看,得到数据库里另一表的数据,这样就真正做到了开闭原则,不修改App任何代码进行查询数据库的切换

(userDaoImpl中为testName1,userDaoImpl1中为testName2,这里为2)

3.接着在APP.java中引用两个类,并做比较,结果为False.                 原因:在java中,我们引用一个对象,就会创建一个堆空间,并且有一个栈空间指向它,当我们又引用一个对象时,它会创建一个新的堆空间,又有一个新的栈空间指向它,而比较的是内存地址,而这两者是不一样的

4.现在用里氏替换原则再来比较一下,为ture.原因:用里氏替换原则运行代码后,它会创建一个Spring容器,里面存放的就是我们要取的数据库,当两个对象分别去取的时候,其实他们取的是同一个,所以他们是一样的

因此,我们更倾向于用里氏替换原则,它可以节省内存,也叫单利模式(singleton)

五、依赖注入

1.创建service文件夹,并在service文件夹下创建UserService类,在其中写入代码

2.修改APP.java代码,用UserService来输出

//用UserService来输出
        UserService userService=new UserService();
        System.out.println(userService.findUser());

运行输出没问题

3.但可以有更好的方法,和前面一样利用里氏替换原则,在applicationContext.xml增加一个service节点

 <bean class="org.example.service.UserService" id="userService">
 </bean>

修改添加APP.java代码

 //利用里氏替换原则-->用UserService来输出
        UserService userService=(UserService) applicationContext.getBean("userService");
        System.out.println(userService.findUser());

运行结果一样,但是实现了解耦,更方便

4.接下来修改UserService代码,不用new方法,我们给它创建方法

5.修改APP.java代码, 用set方法对userService变量赋值,点击运行,没有问题,但是他们之间还是存在耦合性,

为此,我们使用依赖注入(DI),用Spring容器来决定

依赖注入(DI):从Spring容器角度来看,Spring容器负责将被依赖的对象赋值给调用者的成员变量,相当于为调用者注入它所依赖的实例,这就是Spring的依赖注入。

在applicationContext.xml中增加一行代码,修改APP.java代码,将 userService.setUserDao(userDao);注释掉,运行正确

六、Spring 基本类型String依赖注入

1.在org.examole文件夹下新建包pojo,并创建一个实体类Person

2.声明两个成员变量age和name,并且给他们增加Getter and Setter方法

七、spring容器注解

1.上面教大家任何解决耦合性,但是发现代码好像并没有减少,现在教大家方法既实现解耦又不用很多代码,applicationContext.xml中节点的代码全都可以删掉哦,我们只用一行代码就可以代替它们,一听就很方便吧

2.在applicationContext.xml中增加一行代码使注解生效

3.我们也可以给它们赋值,在Person类中增加一个注解@Value,注意:注解只能管到离它最近的那行代码

运行:

4.其他的类也一样可以加入注解,注意:有四个注解它们功能一模一样,只是为了区分而已。

@Component->其他层
@Service->Service层
@Repository->dao层
@Controller->Controller层

我们不能在接口UserDao上加注解,只能加在它的实现类UserDaoImpl上

在它上面加上 @Autowired注解,它可以实现自动注入

//在它上面加上 @Autowired注解,它可以实现自动注入
    //    Autowired 自动注入
//    Autowired 替换set和get方法

同样可以运行成功

 上课内容总结 及 参考实践该博客:

SpringBoot开发之Spring基础_springboot greenplum-优快云博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值