SPRING

1、Spring是一个分层的J2EE/2SE一站式的开源框架

1)降低了耦合度,

2)允许使用者选择框架

3)分层一站式:为每层的开发都提供了解决方法。

4)对目前流行的框架都进行支持

2、Spring的核心是IOC(控制反转)【DI】和AOP容器框架

一、IOC容器

IOC:控制反转。控制权反转给spring。

之前对象的创建是由程序员完成的,用了spring之后,对象的创建教给了spring容器。spring可以帮助我们管理bean对象。
IOC思想基于ioc容器完成,IOC容器底层就是对象工厂

1、将Spring交给Bean管理

【id是bean下的类名,bean会自动起别名,将首字母小写】

【class是id所在的位置】

<bean id="users" class="com.openlab.beans.Users"></bean>

spring对bean的管理——控制反转

——结果相同,说明Spring对bean的管理是单例模式

 @Test
    public  void test02(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
        Object obj = applicationContext.getBean("users");
        System.out.println(obj);
       Users users = applicationContext.getBean("users",Users.class);
        System.out.println(users);
        Users users01 =  applicationContext.getBean(Users.class);//通过类型获取,要求spring容器中只能有唯一的改类型的bean对象
        System.out.println(users01);

    }

对同一个类创建不同的bean,获取到的是不同的bean

    <bean id="users" class="com.openlab.beans.Users"></bean>
    <bean id="users01" class="com.openlab.beans.Users"></bean>
        Users users = applicationContext.getBean("users",Users.class);//通过类名拿
        System.out.println(users);
        Users users01 = applicationContext.getBean("users01",Users.class);//通过类名拿
        System.out.println(users01);

允许无参构造运行

@NoArgsConstructor//加入之后有无参构造的方法可以运行

2、spring给对象的属性赋值

1)set注入:直接调用set方法

   <bean id="users" class="com.openlab.beans.Users">
        <property name="userName" value="admin"></property>
        <property name="status" value="status"></property>
        <property name="password" value="password"></property>
    </bean>

2)构造子注入:

 public Users(String userName,String  password){
        this.userName = userName;
        this.password = password;
    }

【如果不加name,必须按照顺序来写】

 <bean id="users01" class="com.openlab.beans.Users">
        <constructor_arg name="userName" value="test"></constructor_arg>
        <constructor_arg name="password" value="admin123456"></constructor_arg>
    </bean>

属性的值如果是容器中另一个Bean的实例,应该使用ref

    <property name="userInfo" value="userinnfo"></property>

  <bean id="userinfo" class="com.openlab.beans.UserInfo">
        <property name="realname" value="张三丰"></property>
        <property name="address" value="武当"></property>
        <property name="idcard" value="1234565"></property>
        <property name="phone" value="12234"></property>
    </bean>

3)属性的DI:依赖注入

 DI:依赖注入,service依赖dao.将dao的创建给了spring容器。
 

@Getter
@Setter
public class UsersServiceImpl {
    private UsersDao usersDao ;

    public void save(){
        Users users = new Users();
        usersDao.save(users);
        System.out.println("---service中的添加方法---");
    }
}
  <bean  id="userDaoImpl1" class="com.openlab.dao.impl.UsersDaoImpl"></bean>
     <bean  id="userDaoImpl2" class="com.openlab.dao.impl.UsersDaoImpl2"></bean>
     <bean id="userService" class="com.openlab.service.UsersServiceImpl">
          <property name="usersDao" ref="userDaoImpl2"></property>
     </bean>

/*如果值中包含特殊字符,使用<![CDATA[内容]]>*/

3、内部bean

内部bean的定义,使用只能再给emp3中的dept属性赋值
                             可以给id属性赋值,该bean再其他的地方也是不能使用的

【内部bean只使用一次,可以不写id】

  <bean id="emp2" class="com.openlab.beans.Emp">
        <property name="empid" value="1003"></property>
        <property name="empname" value="juddy"></property>
        <property name="dept">
            <bean class="com.openlab.beans.Dept" id="dept">
                <property name="deptname" value="测试部"></property>
            </bean>
        </property>
    </bean>

4、bean工厂

在配置文件中定义的bean类型可以和返回类型不一样

 <bean id="myFactoryBean" class="com.openlab.beans.MyFactoryBean"></bean>
public class MyFactoryBean implements FactoryBean<Emp> {
    @Override
    public Emp getObject() throws Exception {
       Emp emp =   new Emp();
       emp.setEmpid(1001);
       emp.setEmpname("工厂bean创建的bean");
        return emp;
    }
   @Override
    public Class<?> getObjectType() {
        return Emp.class;
    }
}

5、作用域

 prototype:非单例模式

 prototype:单例模式 默认值
 

6、Bean的生命周期

1>构造

2>set

3>初始化方法之前

4>初始化方法

5>初始化方法之后

6>bean可以正常使用

7>销毁


7、注解

1)@Component【普通的java类】
2)@Repository/【持久层,dao层】
3)@Service 【业务层 service层】
4)@Controller 【控制层 servlet,mvc】

1、加入扫描的基准包

<context:component-scan base-package="com.openlab"/>

加入注解 ,表示已经被spring管理

@Getter
@Setter
@Component
public class Users {
    private Integer userid;
    private String username;
    private String password;
}

2、完全注解


@Configuration
@ComponentScan(value = {"com.openlab"})
public class SpringConfiger {
}
  @Test
    public void test01(){
        ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiger.class);
        UsersAction usersAction =  context.getBean(UsersAction.class);
        usersAction.save();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值