Spring简介
Spring不是服务于开发web项目的功能,或业务。而是服务于项目的开发,方便各层间的解耦调用,方便对类的批量管理,是提高软件开发效率,降低后期维护成本的框架。
Spring的核心思想是IOC(控制反转),AOP(切面编程)两点。
IOC:即不再需要程序员去显式地New一个对象,而是把Spring框架把框架创建出的对象拿来用。因为是spring框架创建的对象,对象都在spring框架对象中保存,亦称为spring容器,这样spring就知道当前项目中都创建了哪些对象,这个对象归属于那一层,该如何管理。想使用spring的其他功能第一点就是要用spring的对象,也称为将控制权交给spring管理。
AOP:对某种路径下的所有类,或有共同特性的类或方法统一管理,在原任务执行的前后,加入新功能。做出监控,初始化,整理,销毁等一系列统一的伴随动作。
如果你从事Java编程有一段时间了, 那么你或许会发现(可能你也实际使用过) 很多框架通过强迫应用继承它们的类或实现它们的接口从而导致应用与框架绑死。这种侵入式的编程方式在早期版本的Struts以及无数其他的Java规范和框架中都能看到。Spring竭力避免因自身的API而弄乱你的应用代码。Spring不会强迫你实现Spring规范的接口或继承Spring规范的类,相反,在基于Spring构建的应用中,它的类通常没有任何痕迹表明你使用了Spring。 最坏的场景是, 一个类或许会使用Spring注解, 但它依旧是POJO。
任何一个有实际意义的应用(肯定比Hello World示例更复杂) 都会由两个或者更多的类组成, 这些类相互之间进行协作来完成特定的业务逻辑。 按照传统的做法, 每个对象负责管理与自己相互协作的对象(即它所依赖的对象) 的引用, 这将会导致高度耦合和难以测试的代码。
IOC声明Bean
首先创建的Maven Poject,详细包结构如下
其中AOP会在下一篇进行讲解;
Controller_.java
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("/ApplicationContext.xml");
Service_ s = (Service_) ctx.getBean("service_Impl1_new");
System.out.println(s);
s.show();
}
由于Spring无法单独演示,所以Controller_.java是创建的是一个Servlet,直接调用doPost或者doGet方法,进行Service的实现,输出Service_对象s,执行show方法。
Service_.java
public interface Service_ {
public void show();
}
创建一个Service接口,用来实现Spring。
1.无参构造方法声明bean
Service_Impl1.java
public class Service_Impl1 implements Service_{
public Service_Impl1() {
// TODO Auto-generated constructor stub
System.out.println("service1-无参构造方法");
}
@Override
public void show() {
// TODO Auto-generated method stub
System.out.println("Service_Impl1");
}
}
重写Service_的show方法输出实现了Service_Impl1,编写无参构造方法。
ApplicationContext.xml
<!-- 默认构造方法 -->
<bean id="service_Impl1" class="com.zy.spring.service.serviceimpl.Service_Impl1"></bean>
只需要设置id与class,class对应Service_Impl1,id则是Controller_.java调用的getBean中的参数。运行结果见自定义构造方法注入bean。
2.自定义构造方法声明bean
Service_Impl2.java
public class Service_Impl2 implements Service_{
public Service_Impl2(int a) {
// TODO Auto-generated constructor stub
System.out.println("service2-自定义构造参数:"+a);
}
@Override
public void show() {
// TODO Auto-generated method stub
System.out.println("Service_Impl2");
}
}
ApplicationContext.xml
<!-- 自定义构造方法
Spring基础——IOC九种bean声明方式
最新推荐文章于 2023-10-10 08:56:27 发布