Spring ioc详解,IOC控制反转对象bean

Spring ioc详解

IOC:控制反转-对象

1      程序对象由原来本身程序自己创建,变为spring容器来创建。现在程序只能被动接受。什么时候创建的bean对象。当读取核心配置文件的时候,就创建了该对象!对象的生命周期完全由spring掌控!

2      使程序员只关注业务处理,而不需要关注对象的创建!

3      Ioc能够实现程序的解耦!降低程序的耦合度!

public interface UserDao {

    void getUser();

}

public class UserMysqlDaoImpl implements UserDao {

 

    @Override

    public void getUser() {

        System.out.println("Mysql 数据库获取的数据!");

    }

 

}

public class UserOracleDaoImpl implements UserDao {

 

    @Override

    public void getUser() {

        System.out.println("oarcle 数据库获取的数据!");

    }

 

}

public interface UserService {

    void getUser();

}

 

public class UserServiceImpl implements UserService{

    //  关键

    private UserDao userDao;

   

    public UserDao getUserDao() {

       return userDao;

    }

 

    public void setUserDao(UserDao userDao) {

       this.userDao = userDao;

    }

 

    @Override

    public void getUser() {

       //  关键是:什么时候给对象!此时该对象管理就交给我们的spring容器来管理!

       userDao.getUser();

    }

 

}

Beans.xml

   

    <bean id="oracle" class="com.bjsxt.dao.impl.UserOracleDaoImpl">bean>

    <bean id="mysql" class="com.bjsxt.dao.impl.UserMysqlDaoImpl">bean>

   

   

    <bean id="userServiceImpl" class="com.bjsxt.service.impl.UserServiceImpl" >

        <property name="userDao" ref="mysql">property>

    bean>

测试:

        ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");

        UserServiceImpl userServiceImpl = ac.getBean("userServiceImpl", UserServiceImpl.class);

        userServiceImpl.getUser();

注意:

<bean id="userServiceImpl" class="com.bjsxt.service.impl.UserServiceImpl" >

        

         <property name="userDao1" ref="mysql">property>

     bean>

Bean的生成方式

1.1     无参构造生成

public class Hello {

         public Hello() {

         }

         @Override

         public String toString() {

                   return "我是无参构造!";

         }

}

Beans.xml

测试类:

ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");

Hello hello = ac.getBean("hello", Hello.class);

        System.out.println(hello);


1.2     有参构造

1.2.1  Type:通过数据类型注入:但是,在实际开发过程中不推荐使用。

public class Student {

         private int id;

         private String name;

}

 

<bean id="student" class="com.bjsxt.pojo.Student">

         <constructor-arg type="int" value="12"/>

         <constructor-arg type="String" value="高总"/>

bean>

测试:

                   Student student = ac.getBean("student", Student.class);

                   System.out.println(student);

1.2.2  Index:通过下标来创建。

<bean id="student" class="com.bjsxt.pojo.Student">

      

       <constructor-arg index="0" value="12"/>

       <constructor-arg index="1" value="张惠妹"/>

bean>

1.2.3  Name:spring2.x版本应该不支持name创建实体类

<bean id="student" class="com.bjsxt.pojo.Student">

        

         <constructor-arg name="id" value="111"/>

         <constructor-arg name="name" value="赵本山"/>

bean>

1.2.4  静态工厂

public class StudentStaticFactory {

         public static Student getStudent(int id,String name){

                   return new Student(id, name);

         }

}

<bean id="student" class="com.bjsxt.pojo.StudentStaticFactory" factory-method="getStudent">

         <constructor-arg index="0" value="1"/>

         <constructor-arg index="1" value="董卿"/>

bean>

1.2.5  动态工厂

public class StudentDynamicFactory {

         public Student getStudent(int id,String name){

                   return new Student(id, name);

         }

}

<bean id="dynamic" class="com.bjsxt.pojo.StudentDynamicFactory"/>

<bean id="student" class="com.bjsxt.pojo.Student" factory-bean="dynamic">

         <constructor-arg index="0" value="2"/>

         <constructor-arg index="1" value="黄渤"/>

bean>

Scope属性

1      Singleton 单例:标签默认的就是单例

2      prototype原型:多例模式,每次创建的时候,则会实例化一个 新的对象

3      request 每次请求时创建一个新的对象

4      session 在会话的范围内时一个对象

5      global session 只在portlet下有用,表示是application

6      application 在应用范围中一个对象

         User user = ac.getBean("user",User.class);

                   System.out.println(user);

                   User user1 = ac.getBean("user",User.class);

                   System.out.println(user1);

                   System.out.println("8888888888888888888888");

                   System.out.println(user==user1);

你可能感兴趣的:(spring,IOC,bean,控制反转)