spring05

通过静态工厂的方法创建bean;和实例工厂方法:

<?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.xsd">
    <!-- 通过静态工厂的方法来配置bean ,注意不是配置静态工厂的实例,而是配置bean的实例 -->
    <!-- class 属性:指向的是静态工厂方法的全类名
       factory-method :指向的是静态工厂方法的名字
       constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数 -->
       <bean id="car" class="lib2.Car"
       factory-method="gerCae">
       <constructor-arg value="audi"></constructor-arg></bean>
       <!-- 配置工厂的实例 -->
       <bean id="casec" class="instance"></bean>
       <!-- 通过实例工厂方法来配置bean -->
           <!-- factory-bean: 属性:指向的是静态工厂方法的bean 
       factory-method :指向的是静态工厂方法的名字
       constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数 -->
       <bean id="cae" factory-bean="cad" factory-method="cac">
       <constructor-arg value="asca"></constructor-arg></bean>

</beans>

factory来配置bean。创建类的时候要继承接口

<?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.xsd">
    <!-- 
    通过factorybean来配置bean的实例
    class:只想factorybean的全类名
    property:配置的事factorybean的属性(可能是里面的复制函数set) -->
    <bean id="Car" class="factorybean">
    <property name="brand" value="bwm"></property></bean>

</beans>

基于注解来配置bean和bean的线相关的属性。

 组件扫描:spring能够从classpath夏自动扫描、侦测和实例化具有特定注释的组件;

package test1;

import org.springframework.stereotype.Component;

@Component
public class TestObject {

}
package test2;

import org.springframework.stereotype.Repository;

@Repository
public class UserReposityImpl implements UserRepository {

    @Override
    public void save() {
        // TODO Auto-generated method stub
        System.out.println("UserRepository save....");

    }
}package test3;

import org.springframework.stereotype.Service;

@Service
public class UserService {
    public void add()
    {
        System.out.println("UserSerivce add..");
    }

}
package test4;

import org.springframework.stereotype.Controller;

@Controller
public class UserController {
public void execute()
{
    System.out.println("UserController execute..");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    <!-- 指定spring ioc容器扫描的包 -->   
    <context:component-scan base-package="test1.TestObject"></context:component-scan>

</beans>
package test1;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import test2.UserRepository;
import test3.UserService;
import test4.UserController;

public class Main {
public static void main(String[] args) {
    // TODO Auto-generated method stub
    ApplicationContext ct=new ClassPathXmlApplicationContext("beans-053.xml");
    TestObject to=(TestObject) ct.getBean("testObject");
    UserController userController=(UserController) ct.getBean("userController");
    UserRepository userRepository=(UserRepository) ct.getBean("userRepository");
    UserService userService=(UserService) ct.getBean("userService");
    System.out.println(to);
    System.out.println(userController);
    System.out.println(userService);
    System.out.println(userRepository);
    
}
}

关于MyBeanPostProcessor的应用。

原文地址:https://www.cnblogs.com/dazhi151/p/12622471.html