IOC

来源:互联网 发布:网站80端口开放攻击 编辑:程序博客网 时间:2024/06/06 09:33
                               IOC (Inversion of Control


   spring:核心的jar包
1.aop  面向切面编程  (不修改源代码实现
2.ioc  控制反转   用spring配置创建类对象
3.一站式框架
   .web层springMVC
   .service层 spring的ioc
   .dao层 spring的jdbcTemplete
   


    ioc的两部分操作
      1.ioc的配置文件
      2.ioc的注解的方式


IOC 
    ioc的层原理 
       .xml的配置文件
       .dom4j解析xml
       .工厂的设计模式     (解决类和servlet耦合度太高问题
       .反射


       (类的设计模式  高内聚,低耦合           
    
Example:
public class UserService(){}
public class UserServlet(){
   //得到UserService的对象
   //原始方法new创建
}


first step:创建xml配置文件      
           <bean id="user" class="com.User" />
second step:创建工厂类
public  void UserFactory(){
     public static UserService getUserService(){
        //1 dom4j解析xml文件
        //得到class的属性值  String valueClass=class的属性值(路径    
        //2 使用反射创建类对象
            Class class=Class.forName(valueClass);
            UserService userservice=class.newInstance(); //Class的方法newInstance得到之前路径下的对象
            return userservice; 
 } 
}




bean实例化对象
          *1.xml直接配置
             两个类
              1,基础类  写入图需要的信息
              2. 使用类  ApplicationContext context= new ClassPathXmlApplicationContext("UserInfor.xml");
                 UserInfor user =(UserInfor) context.getBean("user");
              xml配置    <bean id="user" class="com.UserInfor">
          *2.静态工厂模式   (工厂类自动填充
             三个类  
              1.基础类   写入相关的信息
              2.工厂类   利用public  static  ff(){return 基础类对象}
              3.显示使用类 applicationContext c=new ClassPathXmlApplicationContext("xml");
                           对象  =(强制转换) c.getBean("id");
              xml配置  <bean id="id" class="工厂类路径" factory-method="工厂类的static函数"></bean>
              (多了一个factory-mothod映射入factroy的方法中)
          3.对象实例化工厂配置
            用不到   


bean 常用属性
      1.id  根据id配置对象
      2.class 创建对象的全路径
      3.name  和id属性一致  id不能包含特殊字符 但是name能
      4.scope 设置作用的范围
            .singleton 单例对象 (默认值
            .prototype 多例对象
            .request 创建对象把对象放在request域
            .session 创建对象把对象放在session域
            .globalSession 创建对象放在globalSession域
     5.property 对象的属性
         .name  属性的名字
         .value  属性的数值
         .ref    属性为某个类时,引用的是xml中原来类的id


属性注入
     1.调用setx(){}方法写入  
      xml  写入<bean id,class,scope,>
                       <property name,value></property>
                </bean>
     2.有参数的默认构造注入   User(){}    
     3.接口注入  public  interface Face{public insert(){}}   class implements Face(){}继承接口
     
     **4.注入类对象  (工程常用,双层的注入  一层数据一层对象
           三个类
              1.存放数据的infor类 大量的set,get
              2.存放infor类对象的factroy类   getInfor  setInfor
              3,调用factory类的地方
              xml中内容
              <bean id="infor" class="com.Infor"><property name.value>…</property></bean>
              <bean id="factory class="com.Factoy"><property name="Infor",ref="infor "></property></bean>
              factory的bean中存放的property的name为类对象的名字 ,ref为上Infor的对象的id
    
      5.P空间注入
        在 xml中 beans中申请空间  xmlns:p="http://www.springframework.org/schema/p"
                                <bean id="" class="" p:name=""> 可以直接写入  等同于property属性写入


      6.,[],list,map,properties注入
         xml写入
        String[]  <property name="string"> <list><value>1</value><value>nihao</value></list></property>
        list<String>  <property name="list"> <list><value>1</value><value>nihao</value></list></property>
        map<string,Integer>  <property name="map"><map><entry key="" value=""><entry> </map></property>  
        properties <property name="property"><props><prop key="">qwe<prop></props></property>
        map和properties实际用法类似 ,只是xml写法不同
      


           spring 的bean管理




     注释创建对象
     1.添加约束  context 
     2.xml添加包扫描 <context:component-scan base-package="com"> </context:component-scan>
     3,再累前面添加注释生命 @Component(value="userDemo")    userDemo就是对象的名称
          附加注解:@Scope(value="")单对象 @Scope(value="prototype") 多对象时用
     4.其他类中调用 ApplicationContext context=new ClassPathXmlApplicationContext("UserInfor.xml");
                    context.getBean()获取
          1.注解类:
                    1.@component
                    2.@Controller web层
                    3.@Service    业务层
                    4.@Respository 持久层
                 当前的四个注解作用一样,都是创建对象。@Scope(value="prototype")创建的个数约束


           2.注解属性  
                 .@AutoWired
                  使用情景  一个类中  引用其他类      
                   public class AA{
                     @AutoWired
                     priate BB bb;
                     //这样会在扫描的包中自动加载BB类,然后声明为对象
                 .@Resource(name="bb")  指定的类对象名称引入
                    //如果对象还没有创建  就会报错


**实际应用的混合使用
1.创建对象一般用配置文件方式xml   <bean></bean>
2.注入属性一般用注解的方式写入    @resource(name="")
      




 




  
原创粉丝点击