自动装配
Notes依赖自动装配
IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程为自动装配
自动装配方式
按类型(常用)
按名称
按构造方法(不推荐)
不启用自动装配(手动配置,参考上节)
Set方式自动装配public class BookServiceImpl implements BookService { BookDao bookDao; public void setBookDao(BookDao bookDao) { this.bookDao = bookDao; } public void save() { // }}
bean标签属性:autowire=” “
<bean id="userDao" class="com.mvnweb.dao.impl.UserDaoImpl"/>// 或<bean class="com.mvnweb.dao.impl.Use ...
依赖注入方式
Notes
思考,向一个类中传递数据有几种方式?
普通方法(set)
构造方法
依赖注入描述了在容器中建立bean与bean之间的依赖关系的过程,如果bean运行需要的是数字或字符串呢?【简单说,注入的不是new对象,而是数字之类的】
setter注入:简单类型(简单数据类型和String),引用类型
构造器注入:简单类型,引用类型
setter注入(自开发常用)引用类型
在bean中定义引用类型属性并提供可访问的set方法
UserDao userDao;public void setUserDao(UserDao userDao) { this.userDao = userDao;}
配置中使用property标签ref属性注入引用类型对象
<bean id="userDao" class="com.mvnweb.dao.impl.UserDaoImpl"/><bean id="bookService" class="com.mvnweb.servi ...
Bean实例化的三种方式
Notes
一.使用构造器实例化对象bean本质就是对象,可以使用构造方法进行实例化
提供一个可访问的构造方法(不写(默认),或者空参)
无参构造器不存在的情况:抛出BeanCreationException
public BookDaoImpl() { System.out.println("book dao constructor is running...");}# 这里使用私有构造方法依然能实例化,可以想到,实例化过程是使用反射private BookDaoImpl() { System.out.println("book dao constructor is running...");}
可以看到bean确实可以使用构造方法实例化,但内部实现过程是通过反射,这里就涉及了后续需要学习的原理
Spring报错如何看?这里我们使用有参构造模拟报错环境,可以看见非常恐怖
public BookDaoImpl(int i) { System.out.p ...
Shadowsocks使用
如何在本地网络上设置代理服务器并通过 Quantumult X 使用它。这包括配置代理服务器软件并确保 Quantumult X 可以通过本地网络访问它。
设置和使用自己的服务器作为代理服务器1. 在本地服务器上安装代理服务器软件安装 Shadowsocks
安装 Shadowsocks 服务端:
以 Ubuntu 为例,登录到服务器并运行以下命令:
sudo apt updatesudo apt install shadowsocks-libev
配置 Shadowsocks:
创建或编辑 Shadowsocks 配置文件:
sudo nano /etc/shadowsocks-libev/config.json
配置文件内容示例如下:
{ "server": "0.0.0.0", "server_port": 8388, "password": "yourpassword", "timeout": 300, "m ...
Bean的配置
NotesBean基础配置
m名称
bean
类型
标签
功能
定义Spring核心容器管理的对象
属性列表
id:bean的id,使用容器可以通过id值获取对相应bean,在一个容器中id为一class:bean的类型,配置bean的全路径类名
<!-- 格式 --><beans> <bean/> <bean></bean></beans>
Bean别名配置以及相关异常bean对象可以设置别名,id和name是等同的
bean标签的name属性:可定义多个,使用逗号,分号,空格分隔
<bean id="bookDao" name ="bookDao2 bookDao3" class="com.mvnweb.dao.impl.BookDaoImpl"/># 进行绑定时ref可以绑定name,也可以绑定id
当我们使用未定义的bean名,会报NoSuchBeanDefinitionException: No ...
Spring核心思想
NotesIoC(Inversion of Control)控制反转目的:解耦
思想:使用对象时,由主动new对象转换为外部提供对象,对象创建控制权由程序转移到外部
Spring实现IOC思想:Spring提供了容器,IOC容器,用来充当思想中的“外部”
IOC容器:负责对象的创建,初始化等一系列工作,被创建或管理的对象在IoC容器中统称为“Bean”
@Servicepublic class EmpServices implements SPServices { private EmpDao empDao; //...}
此时程序运行还是会报错,因为只在容器中造了对象,但是service依赖于Dao对象才能运行。既然你需要Dao,那么顺带在把这个对象也给到你,这就是依赖注入
DI(Dependency Injection)依赖注入在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入
@Servicepublic class EmpServices implements SPServices { @Autowi ...
五月文摘
《百年孤独》节选
羊皮卷上所载一切自永远至永远不会再重复,因为注定要经受百年孤独的家族不会有第二次机会再大陆上现。
你那么憎恨那些人,跟他们斗了那么久,最终变得和他们一样,人世间没有任何理想值得以这样的沉沦作为代价。
我们趋行在人生这个亘古的旅途。
在坎坷中奔跑,在挫折里涅槃,忧愁缠满全身,痛苦飘洒一地。
很多人选择了向虚拟现实的魅力屈服,寄情于自我幻想,这纵然不切实际却更能与人安慰。
多年以后,面对行刑队,奥雷里亚诺·布恩迪亚上校将会回想起父亲带他去见识冰块的那个遥远的下午。那时的马孔多是一个二十户人家的村落,泥巴和芦苇盖成的屋子沿河岸排开,湍急的河水清澈见底,河床里卵石洁白光滑宛如史前巨蛋。
IoC&DI
public class SpringMyWebApplication { public static void main(String[] args) { SpringApplication.run(SpringMyWebApplication.class, args); }}
内聚&耦合内聚:软件中各个功能模块内部的功能联系。
耦合:衡量软件中各个层/模块之间的依赖,关联的程度。
软件设计软则:高内聚低耦合,模块内部的联系越紧密越好。层与层之间依赖关联越低越好,最好能解除耦合【一般只能降低,最多解除内部耦合,通过注解来转移到外部耦合】
分层解耦
将new 实例对象部分删除,只留下变量声明。即留下功能接口,不显示创建实现类
使用IOC(控制反转)和DI(依赖注入)注解
@Servicepublic class EmpServices implements SPServices { @Autowired //运行时,IOC容器会提供bean对象,赋值给变量,依赖注入 private EmpDao em ...
My first blog demo
hexo远程自动部署使用 GitHub 部署 Hexo 网站并不是专门依赖某个特定的平台,而是利用 GitHub 作为源代码和内容管理的中心。你可以通过 GitHub 将生成的静态文件推送到你自己的云服务器上进行部署。以下是如何使用 GitHub 和你自己的云服务器来部署 Hexo 网站的流程:
1. 准备 GitHub 仓库
在 GitHub 上创建一个新的仓库,将其作为 Hexo 项目的版本控制仓库。
使用 Git 命令行工具或 GUI 工具,将本地的 Hexo 项目推送到这个仓库中。
2. 在云服务器上配置 Git
确保你在云服务器上安装并配置了 Git。
将云服务器的 SSH 公钥添加到 GitHub 仓库的 “Deploy Keys” 或者你的 GitHub 账号的 “SSH and GPG keys” 中。
3. 在云服务器上设置部署脚本
创建一个用于克隆仓库并同步静态文件的脚本。你可以通过 SSH 克隆或拉取 GitHub 上的仓库内容。
例如,编写一个简单的 Bash 脚本:
#!/bin/bashcd /path/to/website # 替换为实际路径g ...