
本文共 20476 字,大约阅读时间需要 68 分钟。
���������������
������������
1)���������������������
1.1)���������������������
���������������������������xml������������������������������������������������������������������������������������������������
1.2)���������������������
���������������������������������������������������������������������������������������������
XML���������������������������������������������������������������������������������������������������������������������������������������������������������������
2)������������(������)
2.1)������������������
���������������������������������������������������
���������
������������������������������������������������������������������������������������
���������������������������������������������������������
������������������������������java������
������������������spring������������������
������������������������������������������������������spring���������������������IoC������
���������
���������������������������XML���������������������������������������������IoC���������������������������������������������������
������������������������������������XML������������
2.2)bean���������
���������@Component
������������������
������������������������
������������������������spring���������bean
���������
@Component("userService") public class UserServiceImpl implements UserService {}
���������@Component������������������������������@Component
@Controller(���������)
@Service(���������)
@Repository(���������)
������������
value���������������������bean���������id
@Component(value="beanId") public class ClassName{}
2.3)bean������������
���������@Scope
������������������
������������������������
���������������������������bean���������scope������
���������
@Scope("singleton") public class ClassName{}
������������
value���������������������bean������������singleton���prototype������������singleton
@Scope(value="prototype") public class ClassName{}
2.4)bean���������������
���������@PostConstruct���@PreDestroy
���������������������
���������������������������
���������������������������bean���������������������������
���������
@PostConstruct public void init() { System.out.println("init..."); } ��� @PreDestroy public void destroy() {}
������
���������������������
<context:component-scan base-package="com.itheima"/>
bean������������������������������Component, Controller, Service, Repository
bean���������������������������Scope, PostConstruct(���������), PreDestroy(���������)
2.5)���������������������
���������@Bean
���������������������
���������������������������
������������������������������������������spring���������bean
���������
@Bean("dataSource") public DruidDataSource createDataSource() { return ������; }
���������
���������������bean������������������������������������������@Bean���������������bean���������������
���������������������XML���������������������������������������������bean���������������������������������������������
@Bean���������������������spring������������������������������������������
@Component public class JDBCConfig { }
������������
value���������������������bean���������id
2.6)bean������������������������������
���������@Value
������������������������������������
������������������������������set������������������
���������������������������������������������������������
���������
@Value("zhangsan")private String username;
���������
value���������������������������������
value���������SpEL���
@Value("#{'zhangsan'}")
@value������������������������������������������������set������
value���������������properties������������������������������������������properties���������������������
������������
value���������������������������������������������������
2.7)bean���������������������������
���������@Autowired���@Qualifier
������������������������������������
������������������������������������������������
������������������������������������������������������������������������
���������
@Autowired(required = false) private UserDao userDao;
���������
@Autowired���������������������
������@Qualifier������������������������������bean���id
@Autowired@Qualifier("userDao")private UserDao userDao;
������������
required���������������������������������null
2.8)bean���������������������
���������@Primary
������������������
������������������������
���������������������������bean������������������������������
���������
@Component@Primarypublic class ClassName{}
���������
@Autowired������������������������������������������������bean���������@Primary������������������������������������������������@Primary������������������������������
2.9)bean���������������������������������������(������)
���������@Inject���@Named���@Resource
���������
@Inject���@Named���JSR330������������������
@Inject = @Autowired ���@Named = @Qualifier������������
@Resource���JSR250���������������������������������������������
@Resource������������
name������������������bean���id
type������������������bean������������������������������Class������
������
������������
������������������������@Value
������������������
@Autowired = @Inject
@Qualifier = @Named
@Primary
@Resource: name, type
2.10)������properties������
���������@PropertySource
������������������
������������������������
���������������properties���������������������
���������
@PropertySource(value={"classpath:jdbc.properties","classpath:abc.properties"},ignoreResourceNotFound = true) public class ClassName { @Value("${propertiesAttributeName}") private String attributeName; }
���������
���������*������������
���������������������spring���������bean������������������������������
������������
value������������������������������properties���������
ignoreResourceNotFound���������������������������������������������������false
2.11)���������������
���������@Configuration���@ComponentScan
������������������
������������������������
���������������������������spring���������������������
���������
@Configuration@ComponentScan("scanPackageName")public class SpringConfigClassName{}
���������
���������������������������spring������������������������������������������������������������������������
bean������������������������@ComponentScan������
AnnotationConfigApplicationContext
���������������������������������������������������AnnotationConfigApplicationContext
������������������ AnnotationConfigApplicationContext ���������������������������@Configuration������������������
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
2.12)���������bean���������������
���������@Import
������������������
������������������������
������������������������bean������spring���������������
���������
@Configuration@Import(OtherClassName.class)public class ClassName {}
���������
@Import���������������������������������������������������������������������������������������������������������������
@Import({JDBCConfig.class, Abc.class})
@Bean���������������������������������������������spring���������������������@Component������
���������������������������������������@Import������������������������������
������
���������������Value, Autowired, Qualifier, Primary, Inject, Named, Resource
������properties���������PropertySource -> Value("${key}")
������������Configuration, ComponenScan
������������������Import
3)bean������������(������)
3.1)������������
(1)@DependsOn
���������@DependsOn
���������������������������������
���������bean���������������������������������������
���������������bean���������������������������������bean������������������������
���������
@DependsOn("beanId")public class ClassName {}
���������
������������������������@DependsOn���������bean���������@Bean���������������bean������������
���������������������@DependsOn���������bean���������������������������@Bean���������bean������������
���������������������@DependsOn���������bean���������@Component������������bean������������
������������
value���������������������������bean������������bean���id
(2)@Order
���������@Order
������������������������
���������������������������������������������
������������������������������������������������������������������������
���������
@Order(1)public class SpringConfigClassName {}
(3)@Lazy
���������@Lazy
���������������������������������
���������bean���������������������������������������
���������������bean������������������������������������
���������
@Lazypublic class ClassName {}
3.2)������������������������
@DependsOn
������������������������������������������������bean���������������������
@Lazy
������������������������������������������������������bean������������������
@Order
������������������������������������������������������������������������������������
4)���������������������(������)
4.1)������������MyBatis������
���������������������������������bean���������������������������
���������������������������������������������������������������������������������������������������������������������bean
������������������������bean���������������������������������������������bean���
������AnnotationConfigApplicationContext���������������������������������������������������������������������������
4.2)������������MyBatis������
1.������mybatis���������������������������������������
public interface AccountDao { ��� @Insert("insert into account(name,money)values(#{name},#{money})") void save(Account account); ��� @Delete("delete from account where id = #{id} ") void delete(Integer id); ��� @Update("update account set name = #{name} , money = #{money} where id = #{id} ") void update(Account account); ��� @Select("select * from account") ListfindAll(); ��� @Select("select * from account where id = #{id} ") Account findById(Integer id); }
2.���������������@Service������bean���������@Autowired������������
@Service("accountService") public class AccountServiceImpl implements AccountService { ��� @Autowired private AccountDao accountDao; }
3.������Spring������������SpringConfig������������properties������
@Configuration@PropertySource("classpath:jdbc.properties")public class SpringConfig {}
4.������������������JDBCConfig���MyBatisConfig���������������������������������������SpringConfig
���������������������JDBCConfig
public class JDBCConfig { @Value("${jdbc.driver}") private String driver; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String userName; @Value("${jdbc.password}") private String password; @Bean(value = "dataSource") public DataSource getDataSource(){ DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(userName); ds.setPassword(password); return ds; }}
MyBatis������������MyBatisConfig
public class MyBatisConfig { @Bean public SqlSessionFactoryBean getSqlSessionFactoryBean(@Autowired DataSource dataSource){ SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); ssfb.setTypeAliasesPackage("com.itheima.domain"); ssfb.setDataSource(dataSource); return ssfb; } @Bean public MapperScannerConfigurer getMapperScannerConfigurer(){ MapperScannerConfigurer msc = new MapperScannerConfigurer(); msc.setBasePackage("com.itheima.dao"); return msc; }}
5.������������������������JDBCConfig���MyBatisConfig���������������������������SpringConfig���
@Configuration@ComponentScan("com.itheima")@PropertySource("classpath:jdbc.properties")@Import({JDBCConfig.class,MyBatisConfig.class})public class SpringConfig {}
6.������AnnotationConfigApplicationContext���������������������
public class App { public static void main(String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); AccountService accountService = (AccountService) ctx.getBean("accountService"); Account ac = accountService.findById(3); System.out.println(ac); } }
4.3)������������Junit
1.������Spring������Junit������������Spring5.0���������������Junit������������������4.12���������
junit junit 4.12 org.springframework spring-test 5.1.9.RELEASE
2.Spring������Junit���������������������Spring���������Junit������������
@RunWith(SpringJUnit4ClassRunner.class)
3.������Spring���������
@ContextConfiguration(classes = SpringConfig.class)
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = SpringConfig.class) public class UserServiceTest { @Test public void testSave() {} }
5)IoC������������������
5.1)IoC������������
������������������Ctrl+n
������������������Ctrl+h
���������������������Alt+7
1.BeanFactory������
2.HierarchicalBeanFactory������
3.AutowireCapableBeanFactory������
4.ListableBeanFactory
5.2)���������������
���������������������������������������������������bean���������������bean
5.3)���������������������������������
���������@ComponentScan
������������������
������������������������
���������������spring���������������������������
���������
@ComponentScan( value="com.itheima", //������������������������ excludeFilters = //������������������������������������������ @ComponentScan.Filter( //��������������� type= FilterType.ANNOTATION, //��������������������������������������������� classes=Service.class) //���������������������������������������@Service���������bean )
excludeFilters���������������������������
includeFilters���������������������������
type���������������������������ANNOTATION, CUSTOM
5.4)������������������������(������)
���������TypeFilter
���������������
���������������������������������
������������������������
public class MyTypeFilter implements TypeFilter { @Override public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException { //������������������������������������������ ClassMetadata classMetadata = metadataReader.getClassMetadata(); //��������������������������������������� String className = classMetadata.getClassName(); if(className.equals("com.itheima.dao.impl.BookDaoImpl")){ return true; } return false; } }
���������������������������������������bean���������������������������������������FilterType.CUSTOM���������������������������������MyTypeFilter.class���
@ComponentScan( value = "com.itheima", excludeFilters = @ComponentScan.Filter( type= FilterType.CUSTOM, classes = MyTypeFilter.class ) )
5.5)������������������(������)
1.���������������Spring������bean
������bean������������������
XML���������������<bean />������������
������@Component���������������������
2.���������������������������������������
���������������������������������������������������bean���������������������������������������bean���������
������������ImportSelector
���������ImportSelector
���������������
������������������bean���������
���������
public class MyImportSelector implements ImportSelector { public String[] selectImports(AnnotationMetadata icm) { return new String[]{"com.itheima.dao.impl.AccountDaoImpl"}; } }
@Configuration@ComponentScan("com.itheima") @Import(MyImportSelector.class) public class SpringConfig { }
1.���properties������������������������������������
public class MyImportSelector implements ImportSelector { @Override public String[] selectImports(AnnotationMetadata importingClassMetadata) { //2.������import.properties������������������������ ResourceBundle bundle = ResourceBundle.getBundle("import"); String className = ,bundle.getString("className"); return new String[] {className}; } }
#2.������import.properties������������������������ className=com.itheima.dao.impl.BookDaoImpl
2.���properties������������������������������������
public class MyImportSelector implements ImportSelector { @Override public String[] selectImports(AnnotationMetadata importingClassMetadata) { // 3.������import.properties������������������������ ResourceBundle bundle = ResourceBundle.getBundle("import"); String className = bundle.getString("className"); return className.split(","); } }
#3.������import.properties������������������������ className=com.itheima.dao.impl.BookDaoImpl,com.itheima.dao.impl.AccountDaoImpl
3.���properties������������������������������������������������������������������������CustomerImportSelector
path=com.itheima.dao.impl.*
5.6)������������������(������)
���������ImportBeanDefinitionRegistrar
���������������
������������������bean���������������
���������
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { public void registerBeanDefinitions(AnnotationMetadata icm, BeanDefinitionRegistry r) { ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(r, false); TypeFilter tf = new TypeFilter() { public boolean match(MetadataReader mr, MetadataReaderFactory mrf) throws IOException { return true; } }; scanner.addIncludeFilter(tf); scanner.scan("com.itheima"); }}
5.7)bean���������������������(������)
BeanFactoryPostProcessor
���������������������bean������������������������bean���������������������������������������������������������������������������
������������������������������������������������������������������������
public class MyBeanFactory implements BeanFactoryPostProcessor { @Override //���������������bean������������������ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { //���1������ System.out.println("���1������������������������������������..."); }}
���������������������������MyBeanFactory
@Configuration@ComponentScan("com.itheima")@Import(MyBeanFactory.class)public class SpringConfig {...}
BeanPostProcessor
������������������������bean������������������������������������������������bean���������������������������������������������������
������������������������������������������bean������������������������������bean������������������
public class MyBean implements BeanPostProcessor { //������bean��������������������� public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { //���2������ System.out.println(beanName); System.out.println("���2������������������������������������������������"); return bean; } //������bean��������������������� public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { //���4������ System.out.println("���4���������������������������������������"); return bean; }}
@Configuration@ComponentScan("com.itheima")@Import({MyBeanFactory.class, MyBean.class})public class SpringConfig {}
InitializingBean
������������������������bean���������������������������������������������������������������������bean���������������������������
������������������������������������������������bean������������������������������������������������
@Service("mobileService")public class MobileServiceImpl implements MobileService, InitializingBean { @Override public void create() { System.out.println("������������������..."); } @Override //������������bean���������������������������������init-method������������ public void afterPropertiesSet() { //���3������ System.out.println("���3���������������������������"); }}
5.8)���������bean���������������������(������)
������������FactoryBean���������MyBatis������SqlSessionFactoryBean������
������������bean���������������������������������������������������������������
public class EquipmentDaoImplFactoryBean implements FactoryBean { ��� @Override public Object getObject() throws Exception { return new EquipmentDaoImpl(); } ��� @Override public Class getObjectType() { return null; } ��� @Override public boolean isSingleton() { return false; } }
@Configuration public class SpringConfig { ��� @Bean("equipmentDaoImplBean") public EquipmentDaoImplFactoryBean equipmentDaoImplBean() { return new EquipmentDaoImplFactoryBean(); } }
���������������
public class App { public static void main(String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); EquipmentDao equipmentDao = (EquipmentDao)ctx.getBean("equipmentDaoImplBean"); equipmentDao.save(); }
FactoryBean���BeanFactory������
FactoryBean���������������������bean���������������
发表评论
最新留言
关于作者
