DI—Dependency Injection,即“依赖注入”:组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。

手动注入的setter注入

根据属性的不同类型,可以分为三种注入方式:

1)基本类型注入

2)Spring组件类型注入

3)集合类型注入

代码演示:

<bean id="boy" class="model.Boy">
<property name="age" value="18"></property> <!-- spring基本数据类型的注入 -->
<property name="name" value="张三"></property> <property name="dog" ref="dog"></property> <!-- spring bean组件的注入 --> <property name="likes" > <!-- spring 集合类型List的注入 注意有先后顺序 -->
<list>
<value type="java.lang.String">打篮球 </value>
<value type="java.lang.String">踢足球 </value>
<!--ref bean="cat"/-->
</list>
</property> <property name="likesset" > <!-- spring 集合类型Set的注入 注意没有先后顺序 -->
<set>
<value type="java.lang.String">打游戏 </value>
<value type="java.lang.String">聊天</value>
<!--ref bean="cat"/-->
</set>
</property> <property name="scoremap" > <!-- spring 集合类型Map的注入 注意没有先后顺序 -->
<map>
<entry key="语文" value="100"> </entry>
<entry key="数学" value="90"> </entry>
<!--entry key-ref="bean" value-ref=""></entry-->
</map>
</property>
</bean>

使用注解配置文件

要把spring-aop-4.1.0.RELEASE包导入项目中,这个包提供对注解的支持,如果不用注解,那就不用这个包。

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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.chinasofti"></context:component-scan> </beans>

@Service:用于标注业务层组件、

@Controller:用于标注控制层组件(如struts中的action)、

@Repository:用于标注数据访问组件,即DAO组件。

@Component:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

@Component(value="boy")
public class Boy { @Value(value="张三")
private String name;
@Value(value="10")
private int age;
@Resource(name="dog")
private Dog dog;
Set get 方法 }

1)@Component(value="boy") 相当于把Boy加入Spring容器中,并起名叫boy

2)@Value(value="张三") 相当于setter方式,给成员变量赋值为张三

3)@Resource(name="dog")相当于

<bean id = "boy" class="com.chinasofti.Boy">

<property name="dog" ref="dog"></property>

</bean>

总结:注解使用可以代替配置文件,不过,这种注解的方式不适合应用在大项目中,因为@Component(value="boy")boy有可能会相同。

Log4J用法:

1)导入log4j-1.2.8.jar
放在WebRoot->WEB-INF->lib中,切记,要把它加载到项目中(Build path)

2)在src目录下新建一个log4j.properties文件,此文件的功能是,设置出错信息录入方式

log4j.rootLogger=INFO,BB

log4j.appender.BB=org.apache.log4j.FileAppender
log4j.appender.BB.File=D:\\test.log
log4j.appender.BB.layout=org.apache.log4j.PatternLayout
log4j.appender.BB.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %F %p %m%n

3)创建一个类叫Log.java的类,写入public static Logger logger = Logger.getLogger(Log.class.getName()); 得到log4j的对象

import org.apache.log4j.Logger;

public class Log {
public static Logger logger = Logger.getLogger(Log.class.getName());
}

4)当程序出异常时,就可以在catch中使用

public class Login4jServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { Log.logger.error("进入Login4jServlet模块");
try{
String aa = request.getParameter("aa");
int count = 100/0;
int intaa = Integer.parseInt(aa);
}catch(Exception e){
Log.logger.error(e.getMessage());
request.setAttribute("errMsg","系统繁忙,请稍后连接");
request.getRequestDispatcher("error.jsp").forward(request, response);
}
}
}

运行后会在指定位置输出log文件,可以协助调试程序错误。

spring笔记二的更多相关文章

  1. Spring笔记(二)Core层

    Spring用一种非入侵的方式来管理程序,模块结构图如下:   .Core层 IOC(控制反转):应用本身程序不负责依赖对象的创建及维护,依赖对象的创建及维护有外设容器负责,即:IOC: DI(依赖注 ...

  2. spring笔记(二)

    共性问题: 1. 服务器启动报错,什么原因? * jar包缺少.jar包冲突 1) 先检查项目中是否缺少jar包引用 2) 服务器: 检查jar包有没有发布到服务器下: 用户库jar包,需要手动发布到 ...

  3. Spring 笔记 -06- 从 MySQL 建库到 登录验证数据库信息(maven)

    Spring 笔记 -06- 从 MySQL 建库到 登录验证数据库信息(maven) 本篇和 Spring 没有什么关系,只是学习 Spring,必备一些知识,所以放在这里了. 本篇内容: (1)M ...

  4. JDBC学习笔记二

    JDBC学习笔记二 4.execute()方法执行SQL语句 execute几乎可以执行任何SQL语句,当execute执行过SQL语句之后会返回一个布尔类型的值,代表是否返回了ResultSet对象 ...

  5. MyBatis笔记二:配置

    MyBatis笔记二:配置 1.全局配置 1.properites 这个配置主要是引入我们的 properites 配置文件的: <properties resource="db.pr ...

  6. Spring笔记(6) - Spring的BeanFactoryPostProcessor探究

    一.背景 在说BeanFactoryPostProcessor之前,先来说下BeanPostProcessor,在前文Spring笔记(2) - 生命周期/属性赋值/自动装配及部分源码解析中讲解了Be ...

  7. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  8. jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}

    笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...

  9. Mastering Web Application Development with AngularJS 读书笔记(二)

    第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...

随机推荐

  1. background兼容IE9以下版本

    .box {    width:100%;    height:80%;        background: url('img/nav_bg.png') no-repeat;    backgrou ...

  2. ExtJS动态切换主题

    ExtJS动态切换主题         在Sencha Cmd构建的Ext程序中怎么去动态切换主题,目前看好像只能单一切换,但是在官网文档找到了答案 Resource Management在上一节通过 ...

  3. BigData--hadoop集群搭建之hbase安装

    之前在hadoop-2.7.3 基础上搭建hbase 详情请见:https://www.cnblogs.com/aronyao/p/hadoop.html 基础条件:先配置完成zookeeper 准备 ...

  4. python内置常用高阶函数(列出了5个常用的)

    原文使用的是python2,现修改为python3,全部都实际输出过,可以运行. 引用自:http://www.cnblogs.com/duyaya/p/8562898.html https://bl ...

  5. 11 非阻塞套接字与IO多路复用(进阶)

    1.非阻塞套接字 第一部分 基本IO模型 1.普通套接字实现的服务端的缺陷 一次只能服务一个客户端! 2.普通套接字实现的服务端的瓶颈!!! accept阻塞! 在没有新的套接字来之前,不能处理已经建 ...

  6. python基础,导入模块,if语句,while语句

    python基础 python代码 变为字节码 变为机器码 最后执行执行‘文件名.py’文件时出现的‘文件名.pyc’文件为字节码 缓存机制 使用pycharm的时候在文件最开始添加下面这两行代码,中 ...

  7. python递归函数(计算阶乘)

    def f1(x,x1=1): if x == 1: return x1 #x1这个值为我们所需要的值,所以返回 x1 *= x r = f1(x-1,x1) #r接收返回值,并在下面接着返回 ret ...

  8. 密码发生器 南阳acm519

    密码发生器 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 在对银行账户等重要权限设置密码的时候,我们常常遇到这样的烦恼:如果为了好记用生日吧,容易被破解,不安全:如 ...

  9. red hat 7 启动过程(EFI)

    不同版本的Linux系统的启动过程在某些地方是不一样的,现在先来介绍一下red hat 7 的启动过程(EFI). (加电→图形登录界面) 接通电源 按下电源键 EFI固件启动 初始化硬件 从EFI启 ...

  10. Go语言中的HTTP

    Go中的http使用 package main import ( "fmt" "net/http" "io/ioutil" "st ...