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