Spring:
面向接口编程,表示层调用控制层,控制层调用业务层(service),业务层(service)调用数据访问层(dao)
Ioc:控制反转
对象由原来程序本身创建,变为了程序接收对象。
程序员主要集中精力于业务实现。
实现了service和dao的解耦工作。service层和dao层实现了分离。没有直接依赖关系。
如果dao层的需求发生改变,应用程序本身不用改变。
HelloSpring:
导入包:
spring配置文件名称可以自定义。
hello对象由spring容器进行创建。
hello的属性由spring容器进行设置的。
这个过程叫控制反转。
控制的内容是什么:指谁来控制对象的创建。传统的应用程序对象的创建是由程序本身控制的,使用spring后,是由spring来创建。
Hello.java
package bean;
public class Hello {
private String name;
public void setName(String name){
this.name = name;
}
public void show(){
System.out.println("hello "+name);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
beans.xml
<!-- bean是java对象由spring容器来创建和管理 -->
<bean name="hello" class="bean.Hello">
<property name="name" value="zhang" />
</bean>
</beans>
Test.java
package test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import bean.Hello;
public class Test {
public static void main(String[] args) {
//解析beans.xml文件生成管理相应的bean对象。
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
Hello hello = (Hello)context.getBean("hello");
hello.show();
}
}
import service.UserService;
import dao.UserDao;
public class UserServiceImpl implements UserService {
//实现了service和dao的解耦
private UserDao userDao = null;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void getUser() {
userDao.getUser();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="mySqlDao" class = "impl.MySqlDaoImpl"/>
<bean id="oracleDao" class = "impl.OracleDaoImpl"/>
<bean id="userDaos" class = "impl.UserDaoImpl"/>
<bean id="service" class = "impl.UserServiceImpl">
<property name="userDao" ref="mySqlDao"></property>//ref 是引用对象,对象是由spring来创建的
</bean>
</beans>
使用ioc创建对象 有3种方式:
1.通过无参构造方法来创建对象
ublic class User {
public User() {
System.out.println("无参构造方法");
}
private String name;
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println(name);
}
}
<bean id="user" class="vo.User">
<property name="name" value="张三"></property>
</bean>
2.有参的构造方法创建对象:
public class User {
private String name;
public User(String name){
super();
this.name = name;
}
public void show(){
System.out.println(name);
}
}
beans.xml3种配置方法:
1.通过index下标:index="0"
2.根据参数名来设置
3.根据参数类型来设置:
1.<bean id="user1" class="vo.User">
<constructor-arg index="0" value="lisi" />
</bean>
2.<bean id="user1" class="vo.User">
<constructor-arg name="name" value="lisi" />//指定参数名
</bean>
3.<bean id="user1" class="vo.User">
<constructor-arg type="java.lang.String" value="lisi" />//指定参数类型
</bean>
3.通过工厂方法来创建对象
1.静态工厂
package factory;
import vo.User;
public class Factory {
public static User newInstance(String name){
return new User(name);
}
}
<bean id="user1" class="factory.Factory" factory-method="newInstance">
<constructor-arg index="0" value="wangwu"></constructor-arg>
</bean>
2.动态工厂
package factory;
import vo.User;
public class DynamicFactory {
public User newInstance(String name){
return new User(name);
}
}
<bean id="userFactory" class="factory.DynamicFactory"></bean>
<bean id="user1" factory-bean="userFactory" factory-method="newInstance">
<constructor-arg index="0" value="wangwu"></constructor-arg>
</bean>
spring的配置详解:
<alias name="user1" alias="u2"/>
<constructor-arg index="0" value="wangwu"></constructor-arg>
</bean>
<bean id="userFactory" class="factory.DynamicFactory"></bean>静静态态
Aop:面向切面