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文件,可以协助调试程序错误。

最新文章

  1. 微信小程序常见问题集合(长期更新)
  2. 8-05分支结构CASE..END
  3. Visual Studio+TFS--强大的项目管理工具
  4. 如何建立一个完整的游戏AI
  5. BZOJ 3827: [Poi2014]Around the world
  6. UVALive 7267 Mysterious Antiques in Sackler Museum (判断长方形)
  7. Qemu文档
  8. ASP.NET 经典60道面试题
  9. 注入攻击-SQL注入和代码注入
  10. nginx-301重定向开始
  11. TCP的拥塞控制(转载)
  12. 【Eclipse】WebServiceExplorer
  13. [Machine Learning (Andrew NG courses)]IV.Linear Regression with Multiple Variables
  14. Java中取某一个范围的随机数
  15. 又一次认识HTML,CSS,Javascript 之node-webkit 初探
  16. zookeeper curator处理会话过期session expired
  17. Kafka+Zookeeper集群搭建
  18. kubernetes入门(05)kubernetes的核心概念(2)
  19. PHP实现部分字符隐藏
  20. 质量:“PM,你怎么可以放弃我?!”

热门文章

  1. js判断两个日期是否在几个月之内
  2. html样式不兼容 详解(转)
  3. 【tp5.1】微信公众号授权登录及获取信息录入数据库
  4. Chrome浏览器调试移动端网页 chrome://inspect/#devices
  5. laravel框架excel 的导入导出功能
  6. liunx下搭建python开发环境
  7. Electron入门应用打包exe(windows)
  8. 云计算之路-阿里云上:奇怪的CPU 100%问题
  9. npm命令 VS yarn命令
  10. Windows下nginx作为静态资源服务器使用