面向对象——三层架构(表现层、业务层、持久层)

三层架构:即表现层、业务层、持久层。

① 持久层:采用DAO模式,建立实体类和数据库表映射(ORM映射)。也就是哪个类对应哪个表,哪个属性对应哪个列。持久层

的目的就是,完成对象数据和关系数据的转换。

② 业务层:采用事务脚本模式。将一个业务中所有的操作封装成一个方法,同时保证方法中所有的数据库更新操作,即保证同时成

功或同时失败。避免部分成功部分失败引起的数据混乱操作。

③ 表现层:采用MVC模式。

M称为模型,也就是实体类。用于数据的封装和数据的传输。

V为视图,也就是GUI组件,用于数据的展示。

C为控制,也就是事件,用于流程的控制

设计原则:

业务层接口的设计原则:一个实体类一个接口,一次提交一个业务方法。业务方法的参数来自表现层。

持久层接口的设计原则:一个实体类一个接口,一次数据库操作一个持久方法。

File不属于流,它只是用来屏闭不同文件系统,用来统一 描述文件的实体BEAN,new File时给它传入文件名称或是路径,它就会去根据参数查找对应的文件属性然后封装 成实体。用来处理判断该路径是一个文件还是路径,文件或路径的权限,修改时间等等,路径的子路径list等等目录操作。
File不属于文件流,只能代表一个文件或是目录的路径名而已.
而FileInputStream关注的是文件的内容,是用来进行文件读写等操作的二进制流类。大多数情况下,构造FileInputStream 时传递一个File对象做参数,也可以直接传递String的文件路径。

关于变量初始化的问:现在的理解是,如果是全局变量默认初始化,局部变量必须要初始化,或者直接赋值我也觉得可以(但是一开始就直接赋值可能后面用到了就不太好了)

serclet:https://www.cnblogs.com/xdp-gacl/p/3760336.html

--
setter和getter方法的理解:
其实说得明白点吧,这只是java类(特别的很多时候是一个javabean)的两个方法,以提供对某个变量(字段)设置与访问的两个入口,在很多时候也正如你说,跟定义成public是没有两样的,具体的原因在于:
(1)由于很多框架都是调用这两个方法来实现沟通,这是一种习惯了。
(2)get/set方法也不一定只是简单的作一个赋值,或一个返回值吧,在这里可以作一些权限的控制,比如不是每个角色都可以赋值的。再比如返回的值不一定是值本身,可以是经过处理了的,比如加密,这用public定义是不能作到的。

关于@Autowired的的详解,清晰,透彻
https://www.cnblogs.com/caoyc/p/5626365.html

@component是Spring中注解注解配置的一种方式(个人觉得也是工作最常用最简单的方法),作用就是代替new对象的过程,实际上就是实例化一个对象,将其放到IOC容器中,当别人需要这个对象的时候,通过@Autowire将改对象注入到自己的类中,通过Autowire 在容器中找到该对象,不需要new,总的来说,就是@component负责new出来对象,放入容器中,@Autowire负责用到时取出来,Autowire是通过类型来取,就是该实现类如果只有一个就会直接取该类的对象,如果有多个类,则通过名字来取,如果没有就会报错

具体案例见链接:https://www.cnblogs.com/caoyc/p/5626365.html

扩展:如果不通过@Autowired的,若需要通过Setter来注入对象:

用@Autowired,用@Autowired的则替代setter,方便简单,但是要在xml文件中配置相关参数

package com.proc.bean.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.proc.bean.repository.UserRepository; @Service
public class UserService { @Autowired
private UserRepository userRepository; public void save(){
userRepository.save();
}
}

 用Setter:

package com.proc.bean.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.proc.bean.repository.UserRepository; @Service
public class UserService { private UserRepository userRepository;
//这儿就是setter方法,同样可以得到userRepository对象。
  public int getuserRepository() 
  {
    return userRepository;
  }   public void setuserRepository(UserRepository userRepository)
  {
    this.userRepository= userRepository;
  }
 public void save()
  {
    userRepository.save();
  }
}

Spring的构造注入、setter注入以及自动装配链接:https://blog.csdn.net/lu677521/article/details/79017912

一、Bean是啥

1、Java面向对象,对象有方法和属性,那么就需要对象实例来调用方法和属性(即实例化);

2、凡是有方法或属性的类都需要实例化,这样才能具象化去使用这些方法和属性;

3、规律:凡是子类及带有方法或属性的类都要加上注册Bean到Spring IoC的注解;

4、把Bean理解为类的代理或代言人(实际上确实是通过反射、代理来实现的),这样它就能代表类拥有该拥有的东西了

以Bean为核心的IOC/DI机制:
总述理论核心:在spring中,所有的对象都会被spring核心容器管理。一切对象统称为Bean。
Spring容器可通过XML配置文件或者注解去管理这堆Bean。bean是一个组件

二、注解分为两类:

1、一类是使用Bean,即是把已经在xml文件中配置好的Bean拿来用,完成属性、方法的组装;比如@Autowired , @Resource,可以通过byTYPE(@Autowired)、byNAME(@Resource)的方式获取Bean;

2、一类是注册Bean,@Component , @Repository , @ Controller , @Service , @Configration这些注解都是把你要实例化的对象转化成一个Bean,放在IoC容器中,等你要用的时候,它会和上面的@Autowired , @Resource配合到一起,把对象、属性、方法完美组装。

关于Spring IOC的学习和理解的更多相关文章

  1. JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(6):Spring IOC容器学习(概念、作用、Bean生命周期)

    一.IOC控制反转概念 控制反转(IOC)是一种通过描述(在Java中可以是XML或者是注解)并通过第三方去生产或获取特定对象的方式. 主动创建模式,责任在于开发者,而在被动模式下,责任归于Ioc容器 ...

  2. Spring ioc与aop的理解

    一 spring的特点 1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易 ...

  3. Spring 学习教程(一):浅谈对Spring IOC以及DI的理解

    一.个人对IoC(控制反转)和DI(依赖注入)的理解我们平时在开发java web程序的时候,每个对象在需要使用它的合作对象时,自己都要将它要合作对象创建出来(比如 new 对象),这个合作对象是由自 ...

  4. 对Spring IOC和AOP的理解

    控制反转(IOC)是什么?(理解好Ioc的关键是要明确"谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了") 1.Ioc-Inversion of Contr ...

  5. spring ioc和aop的理解

    IOC,依赖倒置的意思,所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B,反正A要用到B,则A依赖于B.所谓倒置,你必须理解如果不倒置,会怎么着,因为A必须要有B,才可以调用B,如 ...

  6. Spring ioc,aop的理解

    什么是控制反转? 控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术. 由容器控制程序之间的关系,而不是由代码直接控制 由于控制权由代码转向了容器,所以称为反转 依赖注入,作用是避免手工在各代 ...

  7. 框架面试题:谈谈我对Spring IOC与DI的理解

    IOC是一种叫做“控制反转”的设计思想. 1.较浅的层次——从名字上解析 “控制”就是指对 对象的创建.维护.销毁等生命周期的控制,这个过程一般是由我们的程序去主动控制的,如使用new关键字去创建一个 ...

  8. 【转】spring IOC和AOP的理解

    spring 的优点?1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实 ...

  9. spring ioc DI 理解

    下面是我从网上找来的一些大牛对spring ioc和DI的理解,希望也能让你对Spring ioc和DI的设计思想有更进一步的认识. 一.分享Iteye的开涛对Ioc的精彩讲解 Ioc—Inversi ...

随机推荐

  1. day03 字符串

    今日学习 1.python的基本数据回顾 2.int--数字类型 3.bool值 取值只有True False bool值没有操作 4.字符串 1.python的基本数据回顾 1)int =>整 ...

  2. 各个版本的jee(servlet,jsp)对应的web.xml的模板

    参考链接: https://yutuo.net/archives/7048a006eeb2ac85.html

  3. java中String的equals()和 ==

    String a=new String("java"); String b=new String("java"); System.out.println(a.e ...

  4. Bootstrap中模态框多层嵌套时滚动条问题

    在使用Bootstrap中模态框过程中,如果出现多层嵌套的时候,如打开模态框A,然后在A中打开模态框B,在关闭B之后,如果A的内容比较多,滚动条会消失,而变为Body的滚动条,这是由于模态框自带的遮罩 ...

  5. 关于urls 的基础

    1 普通正则 2 分组正则 url(r'/blog/(\d+)/(\d+)',views.blog)     blog(request,arq1,arq2) 按照位置传参 3 分组命名 url(r'/ ...

  6. ubuntu Cairo图形库 环境搭建

    Cairo官网:http://cairographics.org/ 根据官网指示,我使用如下语句安装好cairo库 sudo apt-get install libcairo2-dev 从官网拷贝代码 ...

  7. c#继承中的函数调用实例

    using System;   namespace Test {     public class Base     {         public void Print()         {   ...

  8. freemarker 获取当前日期

    在freemarker中获取当前日期:${.now}获取当前日期并比较:<#if holdDate?date gt .now?date>.........</#if> 如果要做 ...

  9. sequence to sequence模型

    sequence to sequence模型是一类End-to-End的算法框架,也就是从序列到序列的转换模型框架,应用在机器翻译,自动应答等场景. Seq2Seq一般是通过Encoder-Decod ...

  10. Oracle 10g安装报错记录

    环境描述linux 5.6 安装Oracle 10.2.0.1.0 DBCA问题 1)DBCA图形化界面,出现乱码 测试环境,操作系统中文字符编码导致 export LANG=C 2)DBCA图形化点 ...